Flutter插件yana的使用_yana提供了一种方便的方式来使用声明式的基于状态可测试的导航

Flutter插件yana的使用_yana提供了一种方便的方式来使用声明式的基于状态可测试的导航

YANA 提供了一种方便的方式来使用声明式的基于状态可测试的导航。它是无粗糙边缘的 Navigator 2.0。

声明式

声明式方法将导航与用户界面和业务逻辑分离。不再需要在奇怪的地方使用 Navigator.pushNavigator.pop

TreeNavNode buildNavigation(state) => firstOf<AppState>(
      when: always,
      pages: [
        _loginFlow(),
        _authedFlow(),
      ],
    )(state);

_loginFlow() => anyOf<AppState>(
      when: hasNoUser,
      pages: [
        materialPage(
          when: always,
          name: ScreenKeys.authorization,
          builder: (_) => const LoginScreen(),
          onPopPage: () => false,
        )
      ],
    );

_authedFlow() => anyOf<AppState>(
      when: hasUser,
      pages: [
        materialPage(
          when: always,
          name: ScreenKeys.books,
          builder: (_) => const BooksScreen(),
          onPopPage: () => false,
        ),
        materialPage(
          when: hasSelectedBook,
          name: ScreenKeys.bookDetails,
          builder: (_) => const BookDetailsScreen(),
          onPopPage: () => false,
        ),
      ],
    );

基于状态驱动

基于状态的导航总是可以预测的屏幕。感谢 Navigator 2.0!

class AppRouterDelegate {
  TreeNavNode _navNode;
  StreamSubscription<AppState> _storeSubscription;

  AppRouterDelegate(store) {
    _storeSubscription = store.onChange.listen((event) {
      _navNode = buildNavigation(store);
      notifyListeners();
    });
  }

  @override
  Widget build(BuildContext context) {
    final node = _navNode;
    final pages = [...node.pages];

    return Navigator(
      key: navigatorKey,
      pages: pages,
      onPopPage: (route, result) {
        if (node.onPopPage!(route, result)) {
          return route.didPop(result);
        }
        return false;
      },
    );
  }
}

可测试

简单的单元测试保证每个状态都转化为预期的导航配置。检查示例中的测试以获取详细信息。

var pages = buildNavigation(state).pages;

expect(pages, hasLength(1));
expect(pages[0].name, equals(ScreenKeys.authorization));

state.loggedIn = true;
pages = buildNavigation(state).pages;

expect(pages, hasLength(1));
expect(pages[0].name, equals(ScreenKeys.books));

更多关于Flutter插件yana的使用_yana提供了一种方便的方式来使用声明式的基于状态可测试的导航的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter插件yana的使用_yana提供了一种方便的方式来使用声明式的基于状态可测试的导航的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


在Flutter开发中,可能会遇到一些不太常见或社区贡献的第三方插件,这些插件可能没有详细的文档或广泛的使用案例。如果你遇到一个名为“yana”的插件,并且不确定如何使用它,以下是一些探索和使用的步骤:

1. 查找插件的来源

  • Pub.dev: 首先,检查插件是否在 pub.dev 上发布。在pub.dev上搜索“yana”插件,查看其描述、版本、依赖、作者等信息。
  • GitHub: 如果插件没有在pub.dev上发布,尝试在GitHub上搜索相关的仓库。可能插件的源代码和文档会在GitHub上。

2. 查看插件的文档

  • README.md: 如果插件在GitHub上,通常会有README.md文件,里面包含了插件的使用说明、示例代码、功能描述等。
  • 示例项目: 一些插件会附带示例项目(example folder),通过运行示例项目可以快速了解插件的功能和使用方法。

3. 分析插件的源代码

  • 如果文档不完整或没有示例,可以直接查看插件的源代码。通过阅读源代码,了解插件的核心功能、API接口、参数等。
  • 重点关注lib文件夹中的Dart文件,通常核心逻辑和API都在这里。

4. 集成插件到项目中

  • 添加依赖: 在pubspec.yaml文件中添加插件的依赖项。例如:
    dependencies:
      yana: ^1.0.0
    
  • 导入插件: 在需要使用插件的Dart文件中导入插件:
    import 'package:yana/yana.dart';
回到顶部