Flutter依赖注入插件get_it_injector_gen的使用
Flutter依赖注入插件get_it_injector_gen的使用
get_it_injector_gen
是一个代码生成包,它通过自动化注册 get_it
包中的类来简化依赖注入。该生成器基于 get_it_injector
的注解自动生成必要的代码。
为什么使用get_it_injector_gen
?
对于实际项目来说,手动管理依赖项可能会变得繁琐。get_it_injector_gen
的目标是自动化注册过程,使你能够更轻松地配置和管理依赖项。
特性
- 灵活的注册:通过
get_it_injector
注解定义类应注册为工厂、单例还是懒加载单例。生成器将为你处理代码生成。 - 注入顺序:定义类名模式以确定注入顺序,允许你控制类注入的顺序。
- 分组:将可注入对象组织到具有各自优先级的组中,提供更细粒度的依赖管理方法。
开始使用
-
添加依赖
在你的
pubspec.yaml
文件中添加get_it_injector
和get_it_injector_gen
包:dependencies: get_it_injector: # 最新版本 dev_dependencies: get_it_injector_gen: # 最新版本 build_runner: # 最新版本
-
配置构建运行器
在
build.yaml
文件中配置构建运行器以使用get_it_injector_gen
:targets: $default: builders: get_it_injector_gen: generate_for: - lib/**/*.dart options: # 添加你的选项
注意:所有选项的大小写格式为
snake_case
。提示:有关可用选项的更多信息,请参阅设置接口文件。
-
向生成器提供类
-
通过注解
import 'package:get_it_injector/get_it_injector.dart'; @singleton class MySingletonService { // 实现细节... }
-
通过配置
你可以使用
auto_register
选项包含所有类。你可以使用
groups
、register
、factories
、singletons
、lazy_singletons
和priorities
来过滤应注册的类。每个选项接受一个正则表达式列表,用于匹配类名。targets: $default: builders: get_it_injector_gen: generate_for: - lib/**/*.dart options: auto_register: true groups: - PATTERN # 正则表达式 register: - PATTERN # 正则表达式 factories: - PATTERN # 正则表达式 singletons: - PATTERN # 正则表达式 lazy_singletons: - PATTERN # 正则表达式 priorities: - PATTERN # 正则表达式
提示:有关每个输入的详细信息,请参阅设置接口文件。
-
-
添加设置函数
import 'package:get_it/get_it.dart'; import 'package:get_it_injector/get_it_injector.dart'; import 'FILE_NAME.config.dart'; // 替换为这个文件的名称 final getIt = GetIt.instance; [@setup](/user/setup) Future<void> setup() { getIt.init(); }
-
运行构建命令生成注册代码
使用以下命令运行构建命令:
# 使用 flutter flutter pub run build_runner build --delete-conflicting-outputs # 使用 dart pub run build_runner build --delete-conflicting-outputs
问题和贡献
如果你遇到任何问题或有改进建议,请随时在 GitHub 上打开一个 issue 或贡献代码。
关于 build_runner
的说明
可以通过扁平化项目结构来优化构建运行器的性能,特别是如果你有嵌套文件夹。考虑在 build.yaml
中使用 exclude
选项来排除不必要的文件夹扫描。
targets:
$default:
builders:
get_it_injector_gen:
generate_for:
include:
- lib/**/*.dart
exclude:
- lib/ui/**
提示:generate_for.include
和 generate_for.exclude
是 build.yaml
格式的一部分。你可以在这里找到更多信息。
许可证
此软件根据 Apache 2.0 许可证发布。更多详情请访问 Apache 2.0 许可证。
示例代码
// --- LICENSE ---
/**
Copyright 2025 CouchSurfing International Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
// --- LICENSE ---
import 'package:get_it/get_it.dart';
import 'package:get_it_injector/get_it_injector.dart';
import 'FILE_NAME.config.dart'; // 替换为这个文件的名称
final getIt = GetIt.instance;
[@setup](/user/setup)
Future<void> setup() {
getIt.init();
}
更多关于Flutter依赖注入插件get_it_injector_gen的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter依赖注入插件get_it_injector_gen的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
get_it
是一个非常流行的 Flutter 依赖注入库,而 injector_gen
是一个代码生成器,可以帮助你自动生成依赖注入代码,减少手动编写的工作量。结合 get_it
和 injector_gen
,你可以更高效地管理依赖注入。
1. 添加依赖
首先,你需要在 pubspec.yaml
文件中添加 get_it
和 injectable
依赖。injectable
是 injector_gen
的前身,提供了代码生成功能。
dependencies:
flutter:
sdk: flutter
get_it: ^7.2.0
injectable: ^1.5.3
dev_dependencies:
flutter_test:
sdk: flutter
build_runner: ^2.1.11
injectable_generator: ^1.5.3
2. 创建配置文件
在项目根目录下创建一个 injectable.config.dart
文件,并添加以下内容:
import 'package:injectable/injectable.dart';
import 'package:my_app/di.config.dart';
@InjectableInit(
initializerName: r'$initGetIt', // default
preferRelativeImports: true, // default
asExtension: false, // default
)
void configureDependencies() => $initGetIt();
3. 创建依赖注入配置
在 lib
目录下创建一个 di.dart
文件,并添加以下内容:
import 'package:get_it/get_it.dart';
import 'package:injectable/injectable.dart';
import 'di.config.dart';
final getIt = GetIt.instance;
@InjectableInit()
void configureDependencies() => $initGetIt(getIt);
4. 生成代码
运行以下命令生成依赖注入代码:
flutter pub run build_runner build
这将会生成 di.config.dart
文件,其中包含了自动生成的依赖注入代码。
5. 注册依赖
现在你可以在 lib
目录下的任何文件中注册依赖。例如,创建一个 services.dart
文件:
import 'package:injectable/injectable.dart';
@injectable
class MyService {
void doSomething() {
print('Doing something...');
}
}
6. 使用依赖注入
在你的 main.dart
文件中,初始化依赖注入并使用注册的服务:
import 'package:flutter/material.dart';
import 'di.dart';
import 'services.dart';
void main() {
configureDependencies();
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
final myService = getIt<MyService>();
myService.doSomething();
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, World!'),
),
);
}
}
7. 更多高级用法
injectable
提供了更多的注解和功能,例如:
@singleton
:标记一个类为单例。@lazySingleton
:标记一个类为懒加载单例。@factoryMethod
:标记一个方法为工厂方法。@module
:用于定义模块,模块中可以包含多个依赖。
例如:
@module
abstract class MyModule {
@lazySingleton
MyService get myService => MyService();
}
8. 重新生成代码
每当你添加或修改依赖注入相关的代码时,都需要重新运行以下命令来生成新的代码:
flutter pub run build_runner build
或者,如果你希望在代码发生变化时自动重新生成代码,可以使用:
flutter pub run build_runner watch