Flutter依赖初始化插件dependency_initializer的使用
Flutter依赖初始化插件dependency_initializer的使用
dependency_initializer
是一个用于Dart与Flutter项目的依赖初始化工具。此工具不依赖于Flutter SDK,因此也可以在纯Dart项目中使用。
使用方法
- 准备初始化步骤列表:
final List<InitializationStep<Process>> coreStepList = [
InitializationStep(
title: "Config",
initialize: (
Process process,
) =>
process.config = Config$(),
),
];
final List<InitializationStep<Process>> dataStepList = [
InitializationStep(
title: "HttpClient",
initialize: (
Process process,
) =>
process.client = HttpClient$(
config: process.config!,
),
),
InitializationStep(
title: "Api",
initialize: (
Process process,
) =>
process.api = Api$(
client: process.client!,
),
),
InitializationStep(
title: "Dao",
initialize: (
Process process,
) =>
process.dao = Dao$(
config: process.config!,
),
),
InitializationStep(
title: "Storage",
initialize: (
Process process,
) =>
process.storage = Storage$(
config: process.config!,
),
),
InitializationStep(
title: "Repository",
initialize: (
Process process,
) =>
process.repository = Repository$(
api: process.api!,
dao: process.dao!,
storage: process.storage!,
),
),
];
final List<InitializationStep<Process>> blocStepList = [
InitializationStep(
title: "Bloc",
initialize: (
Process process,
) =>
process.bloc = Bloc(
repository: process.repository!,
),
),
];
- 创建初始化器并启动初始化过程:
final DependencyInitializer initializer = DependencyInitializer<Process, Result>(
createProcess: () => Process(),
stepList: [
...coreStepList,
...dataStepList,
...blocStepList,
],
onStart: (
Completer<DependencyInitializationResult<Process, Result>> completer,
) =>
stdout.write(
"Initializer started",
),
onStartStep: (
DependencyInitializationStep<Process> step,
) =>
stdout.write(
"Step started: ${step.title}",
),
onSuccessStep: (
DependencyInitializationStep<Process> step,
Duration duration,
) =>
stdout.write(
"Step finished: ${step.title} $duration",
),
onSuccess: (
DependencyInitializationResult<Process, Result> initializationResult,
Duration duration,
) =>
stdout.write(
"Initializer finished: $duration",
),
onError: (
Object? error,
StackTrace stackTrace,
Process process,
DependencyInitializationStep<Process> step,
Duration duration,
) =>
stdout.write(
"Initializer error. Step: ${step.title} $duration Error: $error $stackTrace",
),
);
await initializer.run();
使用场景
- 直接使用 如果你想让Flutter应用在启动时显示一个原生启动屏幕,然后启动第一个小部件。
final DependencyInitializer initializer = DependencyInitializer<Process, Result>(
createProcess: () => Process(),
stepList: stepList,
onSuccess: (
DependencyInitializationResult<Process, Result> initializationResult,
Duration duration,
) => runApp(
ApplicationWidget(
result: initializationResult.result,
),
),
onError: (
Object? error,
StackTrace stackTrace,
Process process,
DependencyInitializationStep<Process> step,
Duration duration,
) => runApp(
const ApplicationErrorWidget(),
),
);
await initializer.run();
- 异步完成器 如果你有一个显示启动屏幕的小部件,并且这个小部件必须使用初始化编译器异步重建。
final DependencyInitializer initializer = DependencyInitializer<Process, Result>(
createProcess: () => Process(),
stepList: stepList,
onStart: (
Completer<DependencyInitializationResult<Process, Result>> completer,
) => runApp(
ApplicationWidget(
completer: completer,
),
),
onError: (
Object? error,
StackTrace stackTrace,
Process process,
DependencyInitializationStep<Process> step,
Duration duration,
) => runApp(
const ApplicationErrorWidget(),
),
);
await initializer.run();
- 从结果重新初始化 如果在Flutter应用运行期间需要为新环境重新初始化新的依赖项,并返回Flutter应用的第一个小部件。
await initializationResult.reRun(
stepList: [
InitializationStep(
title: "Config",
initialize: (
Process process,
) =>
process.config = AnotherConfig(),
),
...initializationResult.reinitializationStepList,
],
onSuccess: (
DependencyInitializationResult<Process, Result> initializationResult,
Duration duration,
) => runApp(
ApplicationWidget(
result: initializationResult.result,
),
),
onError: (
Object? error,
StackTrace stackTrace,
Process process,
DependencyInitializationStep<Process> step,
Duration duration,
) => runApp(
const ApplicationErrorWidget(),
),
);
更多关于Flutter依赖初始化插件dependency_initializer的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter依赖初始化插件dependency_initializer的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
dependency_initializer
是一个用于 Flutter 项目的插件,它可以帮助开发者在项目中自动初始化依赖项。这个插件的主要目的是减少手动初始化的代码量,使得依赖项的管理更加简洁和高效。
安装 dependency_initializer
首先,你需要在 pubspec.yaml
文件中添加 dependency_initializer
依赖:
dependencies:
dependency_initializer: ^1.0.0
然后运行 flutter pub get
来安装依赖。
使用 dependency_initializer
-
创建依赖项初始化类
创建一个类来初始化你的依赖项。这个类需要继承自
DependencyInitializer
。import 'package:dependency_initializer/dependency_initializer.dart'; class MyDependencyInitializer extends DependencyInitializer { @override Future<void> initialize() async { // 在这里初始化你的依赖项 // 例如: // Get.put(MyService()); // Get.lazyPut(() => AnotherService()); } }
-
在
main
函数中使用dependency_initializer
在
main
函数中,使用DependencyInitializer.run
方法来运行你的依赖项初始化类。import 'package:flutter/material.dart'; import 'package:dependency_initializer/dependency_initializer.dart'; import 'my_dependency_initializer.dart'; // 引入你创建的初始化类 void main() async { WidgetsFlutterBinding.ensureInitialized(); // 初始化依赖项 await DependencyInitializer.run(MyDependencyInitializer()); runApp(MyApp()); }
-
在你的应用中使用依赖项
现在你可以在你的应用中使用这些依赖项了。例如,如果你使用了
GetIt
或GetX
这样的依赖注入框架,你可以直接在需要的类中获取这些依赖项。import 'package:flutter/material.dart'; import 'package:get/get.dart'; class HomePage extends StatelessWidget { final MyService myService = Get.find<MyService>(); @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: Text('Home Page'), ), body: Center( child: Text('Service initialized: ${myService.someValue}'), ), ); } }