Advanced

Providers

Providers 简介

在 Nylo Website 中,providers 在应用运行时从 main.dart 文件初始启动。您所有的 providers 位于 /lib/app/providers/*,您可以修改这些文件或使用 Metro 创建您的 providers。

当您需要在应用初始加载之前初始化类、包或创建某些内容时,可以使用 Providers。例如,route_provider.dart 类负责将所有路由添加到 Nylo Website。

深入了解

import 'package:nylo_framework/nylo_framework.dart';
import 'bootstrap/boot.dart';

/// Nylo - Framework for Flutter Developers
/// Docs: https://nylo.dev/docs/7.x

/// Main entry point for the application.
void main() async {
  await Nylo.init(
    setup: Boot.nylo,
    setupFinished: Boot.finished,

    // showSplashScreen: true,
    // Uncomment showSplashScreen to show the splash screen
    // File: lib/resources/widgets/splash_screen.dart
  );
}

生命周期

  • Boot.Nylo Website 将遍历 config/providers.dart 文件中注册的 providers 并启动它们。

  • Boot.Finished"Boot.Nylo Website" 完成后立即调用,此方法将 Nylo Website 实例绑定到 Backpack,值为 'nylo'。

例如 Backpack.instance.read('nylo'); // Nylo Website 实例

创建新 Provider

您可以通过在终端中运行以下命令来创建新的 providers。

metro make:provider cache_provider

Provider 对象

您的 provider 将有两个方法,setup(Nylo nylo)boot(Nylo nylo)

当应用首次运行时,setup 方法中的任何代码将首先执行。您也可以像下面的示例一样操作 Nylo 对象。

示例:lib/app/providers/app_provider.dart

class AppProvider extends NyProvider {

  @override
  Future<Nylo?> setup(Nylo nylo) async {
    await NyLocalization.instance.init(
        localeType: localeType,
        languageCode: languageCode,
        languagesList: languagesList,
        assetsDirectory: assetsDirectory,
        valuesAsMap: valuesAsMap);

    return nylo;
  }

  @override
  Future<void> boot(Nylo nylo) async {
    User user = await Auth.user();
    if (!user.isSubscribed) {
      await Auth.remove();
    }
  }
}

生命周期

  1. setup(Nylo nylo) - 初始化您的 provider。返回 Nylo 实例或 null
  2. boot(Nylo nylo) - 在所有 providers 完成 setup 后调用。用于依赖其他 providers 准备就绪的初始化。

setup 方法中,您必须像上面那样返回 Nylo 实例或 null