Flutter开发构建插件dev_build的使用

发布于 1周前 作者 phonegap100 来自 Flutter

Flutter开发构建插件dev_build的使用

dev_build.dart

Build Status

IO工具 run_ci

dev_build 提供了一个方便的方式来在你的包上运行验证测试,包括:

  • 代码分析(analyze)
  • 代码格式化(format)
  • 单元测试(test)

它可以处理VM、Web和Flutter项目。

激活dev_build

# 仅需执行一次
dart pub global activate dev_build

运行常见的验证测试

# 在你的包(以及嵌套的包)上运行常见的验证测试(analyzer, format, test)
pub global run dev_build:run_ci

# 在另一个包(以及嵌套的包)上运行常见的验证测试
pub global run dev_build:run_ci <path>

# 如果全局pub路径在你的环境变量中,可以简化为
run_ci

# 递归执行pub downgrade并进行代码分析
run_ci --pub-downgrade --analyze --no-override --recursive

# 递归执行dart fix --apply
run_ci --fix --recursive

其他注意事项

  • 默认情况下,它还会检查子文件夹中的项目(例如,你可以在仓库的根目录下运行它)。
  • 你可以通过创建 tool/run_ci_override.dart 文件来覆盖默认行为。
  • 你可以通过在 .local/.skip_run_ci 文件夹中创建一个空文件来跳过某个文件夹。

示例Demo

1. 初始化项目

首先,确保你已经安装了 dev_build 插件:

dart pub global activate dev_build

2. 创建一个新的Flutter项目

flutter create my_flutter_app
cd my_flutter_app

3. 配置 pubspec.yaml

pubspec.yaml 中添加 dev_dependencies,以便使用 dev_build 提供的工具:

dev_dependencies:
  dev_build: any
  build_runner: any
  build_test: any
  pedantic: any

4. 创建示例代码

lib/main.dart 中编写一些简单的Flutter代码:

import 'package:flutter/material.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(title: 'Flutter Demo Home Page'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  MyHomePage({Key? key, required this.title}) : super(key: key);

  final String title;

  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  int _counter = 0;

  void _incrementCounter() {
    setState(() {
      _counter++;
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Text(
              'You have pushed the button this many times:',
            ),
            Text(
              '$_counter',
              style: Theme.of(context).textTheme.headline4,
            ),
          ],
        ),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: _incrementCounter,
        tooltip: 'Increment',
        child: Icon(Icons.add),
      ),
    );
  }
}

5. 运行验证测试

在项目的根目录下运行以下命令,以执行代码分析、格式化和测试:

pub global run dev_build:run_ci

这将自动执行以下操作:

  • 代码分析:检查代码是否符合 Dart 的最佳实践和风格指南。
  • 代码格式化:自动格式化代码,使其符合 Dart 的风格规范。
  • 单元测试:运行项目中的所有单元测试。

6. 处理问题

如果 run_ci 发现任何问题,它会输出详细的错误信息。你可以根据提示修复这些问题,然后再次运行 run_ci 来确保所有问题都已解决。

7. 递归处理多个项目

如果你有一个包含多个子项目的仓库,run_ci 会递归地检查所有子项目。例如,假设你有以下目录结构:

my_repo/
├── package1/
├── package2/
└── package3/

你可以在 my_repo 的根目录下运行 run_ci,它会自动检查 package1package2package3 中的所有项目。

8. 跳过某些文件夹

如果你不想对某些文件夹进行检查,可以在该文件夹中创建一个名为 .local/.skip_run_ci 的空文件。例如,在 package2 中创建该文件后,run_ci 将跳过 package2 的检查。

9. 自定义行为

如果你需要自定义 run_ci 的行为,可以在项目根目录下创建一个名为 tool/run_ci_override.dart 的文件,并在其中编写自定义逻辑。例如:

import 'package:dev_build/dev_build.dart';

void main() {
  runCiOverride(
    analyze: true,
    format: true,
    test: true,
    customTasks: [
      () async {
        print('Running custom task...');
        // 添加自定义任务
      },
    ],
  );
}

更多关于Flutter开发构建插件dev_build的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter开发构建插件dev_build的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


在Flutter开发中,dev_build 通常不是一个官方的或者广泛认知的插件名称。不过,假设你提到的 dev_build 是一个自定义的或特定项目中的插件,用于处理开发构建过程中的某些特定任务(比如配置、环境变量管理等),我们可以尝试构建一个类似的插件示例来展示如何在Flutter项目中使用插件。

由于 dev_build 不是标准插件,我将提供一个自定义插件的示例,该插件可以在开发构建期间执行一些特定操作,比如打印日志信息或设置开发环境变量。

1. 创建插件项目

首先,使用Flutter命令行工具创建一个新的插件项目:

flutter create --org com.example --template=plugin dev_build

2. 编写插件代码

在生成的插件项目中,编辑 lib/dev_build.dart 文件,添加一些简单的功能,比如打印日志信息:

library dev_build;

import 'dart:io';

class DevBuild {
  static void printDevInfo() {
    if (Platform.environment.containsKey('FLUTTER_MODE') &&
        Platform.environment['FLUTTER_MODE'] == 'dev') {
      print('This is a development build.');
      // 这里可以添加更多开发构建期间需要的操作
    } else {
      print('This is not a development build.');
    }
  }
}

3. 在Flutter应用中使用插件

在Flutter应用的 pubspec.yaml 文件中添加对本地插件的依赖:

dependencies:
  flutter:
    sdk: flutter
  dev_build:
    path: ../path/to/dev_build  # 指向你的插件项目路径

然后,在Flutter应用的主文件中(比如 lib/main.dart)导入并使用这个插件:

import 'package:flutter/material.dart';
import 'package:dev_build/dev_build.dart';

void main() {
  // 检查是否为开发构建并打印信息
  DevBuild.printDevInfo();

  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Flutter Demo Home Page'),
      ),
      body: Center(
        child: Text('Hello, Flutter!'),
      ),
    );
  }
}

4. 设置环境变量

为了模拟开发构建环境,你可以在运行Flutter应用时设置环境变量。例如,在命令行中使用以下命令运行应用:

FLUTTER_MODE=dev flutter run

这样,当应用启动时,它会检查 FLUTTER_MODE 环境变量,并调用插件中的相应逻辑。

总结

以上示例展示了如何创建一个简单的Flutter插件,并在Flutter应用中使用它来处理开发构建期间的任务。虽然 dev_build 不是官方插件,但通过上述步骤,你可以创建一个具有类似功能的自定义插件来满足你的需求。记得根据实际情况调整插件的功能和实现细节。

回到顶部