Flutter微框架Nylo(二十二):Providers

155 阅读1分钟

在 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 。