在 Nylo 中,当应用程序运行时,Providers
会从 main.dart 文件中启动。所有提供程序都位于 /lib/app/providers/*
,您可以修改这些文件或使用 Metro 创建提供程序。
当您需要在应用最初加载之前初始化类、包或创建某些内容时,可以使用Providers
。也就是说,该 route_provider.dart
类负责将所有路由添加到 Nylo。
深入探究
import 'package:flutter/material.dart';
import 'package:flutter_app/bootstrap/app.dart';
import 'package:nylo_framework/nylo_framework.dart';
import 'bootstrap/boot.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
Nylo nylo = await Nylo.init(setup: Boot.nylo, setupFinished: Boot.finished); // This is where providers are booted
runApp(
AppBuild(
navigatorKey: NyNavigator.instance.router.navigatorKey,
onGenerateRoute: nylo.router!.generator(),
debugShowCheckedModeBanner: false,
),
);
}
生命周期
Boot.Nylo
将遍历 config/providers.dart 文件中已注册的提供程序并启动它们。Boot.Finished
在“Boot.Nylo”完成后直接调用,此方法会将 Nylo 实例绑定到Backpack
值“nylo”。
例如
Backpack.instance.read('nylo');Nylo 实例
创建新的 Provider
您可以通过在终端中运行以下命令来创建新的Provider。
dart run nylo_framework:main make:provider cache_provider
Provider 对象
您的Provider将有两种方法, boot(Nylo nylo)
以及 afterBoot(Nylo nylo)
.
当应用首次运行时,将首先执行启动方法中的任何代码。您还可以操作对象, Nylo
如以下示例所示。
lib/app/providers/app_provider.dart
class AppProvider implements NyProvider {
boot(Nylo nylo) async {
await NyLocalization.instance.init(
localeType: localeType,
languageCode: languageCode,
languagesList: languagesList,
assetsDirectory: assetsDirectory,
valuesAsMap: valuesAsMap);
return nylo;
}
afterBoot(Nylo nylo) async {
User user = await Auth.user();
if (!user.isSubscribed) {
await Auth.remove();
}
}
}
boot
方法提供 Nylo 的实例作为参数。该 afterBoot
方法在 Nylo 完成启动后调用。
在
boot
方法中,必须返回上述或null
类似上述的实例Nylo
。