Flutter模块化代码生成与更新插件modular_codegen_build_update的使用
modular_codegen #
为flutter_modular
生成代码。实现依赖注入自动化。支持注解 Injectable
、Param
和 Data
。
安装 #
在项目的`pubspec.yaml`文件中添加`modular_codegen`和`build_runner`作为开发依赖:dev_dependencies:
modular_codegen: any
build_runner: any
如果需要在Flutter 2中使用null-safety版本,请使用以下配置:
dev_dependencies:
modular_codegen: 3.0.0-nullsafety.2
build_runner: any
依赖注入自动化 #
通过给类添加Injectable
注解来实现依赖注入自动化。别忘了添加`part`指令。
import 'package:flutter_modular/flutter_modular.dart'; // 导入用于使用Injectable注解的库
part 'home_controller.g.dart'; // 定义生成文件的路径,如your_file_name.g.dart
@Injectable() // 使用Injectable注解标记类
class HomeController {
...
}
在项目根目录下执行build_runner
命令:
flutter pub run build_runner build
生成器会在生成的文件中提供一个以$
开头的类名(如$HomeController
),该类可以在模块的binds
中进行注入:
class HomeModule extends Module {
@override
List<Bind> get binds => [
$HomeController, // 由于类名为`HomeController`,生成的可注入类名为`$HomeController`
];
}
依赖注入自动化会根据构造函数的参数生成绑定。
// home_controller.dart
part 'home_controller.g.dart'; // 定义生成文件的路径
@Injectable() // 使用Injectable注解标记类
class HomeController {
final ApiRepository repository;
HomeController({
this.repository, // 构造函数的参数将决定生成的绑定
});
...
}
// 生成的home_controller.g.dart文件内容
Bind(i) => HomeController(
repository: i.get<ApiRepository>(), // 来自构造函数的repository参数
);
Injectable配置 #
`Injectable`注解有两个可选布尔参数:`singleton`和`lazy`。默认情况下,它们都设置为`true`。因此,可以通过传递这些参数轻松禁用单例行为和懒加载行为。示例:
@Injectable(singleton: false) // 禁用单例行为
class ProductController {
...
}
路由参数和导航参数 #
如果需要通过导航器向控制器传递数据,可以使用`Param`或`Data`注解标注构造函数的参数。动态路由中的`Param` #
例如,如果路由URL将包含一个`id`参数,则提供一个同名的`String`参数并标注为`Param`。part 'product_controller.g.dart'; // 定义生成文件的路径
@Injectable() // 使用Injectable注解标记类
class ProductController {
final String id;
ProductController({@Param this.id}); // 此注解允许在路由URL中传递`id`参数,如`/product/:id`
...
}
导航器参数中的`Data` #
同样地,如果需要向路由传递复杂对象,则使用`Data`注解标注构造函数的参数。part 'product_controller.g.dart'; // 定义生成文件的路径
@Injectable() // 使用Injectable注解标记类
class ProductController {
final ProductItem item;
ProductController({@Data this.item}); // 添加@Data注解
...
}
然后,在调用Modular.to.pushNamed
时传递arguments
参数:
Modular.to.pushNamed('/product', arguments: ProductItem());
更多关于Flutter模块化代码生成与更新插件modular_codegen_build_update的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter模块化代码生成与更新插件modular_codegen_build_update的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
modular_codegen_build_update
是一个用于 Flutter 模块化代码生成与更新的插件。它可以帮助开发者自动生成和更新模块化代码,减少手动编写重复代码的工作量。以下是如何使用 modular_codegen_build_update
插件的详细步骤:
1. 添加依赖
首先,你需要在 pubspec.yaml
文件中添加 modular_codegen_build_update
插件的依赖。
dependencies:
flutter_modular: ^5.0.0 # 或者其他版本
modular_codegen: ^1.0.0 # 或者其他版本
dev_dependencies:
build_runner: ^2.1.0 # 或者其他版本
modular_codegen_build_update: ^1.0.0 # 或者其他版本
2. 创建模块
在你的 Flutter 项目中,创建一个模块。例如,创建一个 app_module.dart
文件:
import 'package:flutter_modular/flutter_modular.dart';
class AppModule extends Module {
[@override](/user/override)
List<Bind> get binds => [];
[@override](/user/override)
List<ModularRoute> get routes => [];
}
3. 使用注解
在模块中使用 @Modular
注解,以便 modular_codegen_build_update
插件能够识别并生成相应的代码。
import 'package:flutter_modular/flutter_modular.dart';
import 'package:modular_codegen/modular_codegen.dart';
@Modular()
class AppModule extends Module {
[@override](/user/override)
List<Bind> get binds => [];
[@override](/user/override)
List<ModularRoute> get routes => [];
}
4. 运行代码生成器
使用 build_runner
来生成代码。在终端中运行以下命令:
flutter pub run build_runner build
或者,如果你想在代码发生变化时自动重新生成代码,可以使用:
flutter pub run build_runner watch
5. 使用生成的代码
生成的代码将会在 *.g.dart
文件中。你可以在你的项目中使用这些生成的代码来简化模块的注册和路由管理。
例如,生成的 app_module.g.dart
文件可能包含以下内容:
// GENERATED CODE - DO NOT MODIFY BY HAND
part of 'app_module.dart';
// **************************************************************************
// ModularGenerator
// **************************************************************************
class AppModule extends Module {
[@override](/user/override)
List<Bind> get binds => [];
[@override](/user/override)
List<ModularRoute> get routes => [];
}