Flutter Bloc的导航流程

时间:2018-10-17 15:23:12

标签: dart flutter

我开始使用BLoC模式,但是我有一个问题:

1)您是否应该使用BloC模式来确定是否应更改路由? 示例:身份验证对象更改为unauthenticated,因此侦听器应处理路由更改。

2)BLoC模式是否仅用于UI状态并处理UI更改时的路由更改? 示例:用户单击login并导航到home屏幕。

我问这个问题是因为我遇到一个没有中央导航管理解决方案的问题。

此代码现在在我的BLoC中:

loggedIn.listen((AuthResponse user) {
      currentUserSubject.add(user);
      Navigator.pushReplacement(
        _context,
        PageRouteBuilder(
          pageBuilder: (context, animation1, animation2) {
            return HomePage();
          },
          transitionsBuilder: (context, animation, _, child) {
            return new SlideTransition(
              child: child,
              position: new Tween<Offset>(
                begin: const Offset(0.0, 1.0),
                end: Offset.zero,
              ).animate(animation),
            );
          },
          transitionDuration: Duration(milliseconds: 400),
        ),
      );
    }, onError: (error) {
      Scaffold.of(_context).showSnackBar(new SnackBar(
        content: new Text(error.message),
      ));
    });

2 个答案:

答案 0 :(得分:0)

我看到那里有2个是/否问题(与W / H问题相反),我对两个问题的回答都是。原因是使用BloC和导航,如果应用程序崩溃,您实际上可以恢复当前屏幕(必须具有自动保存状态和状态恢复功能,但这是另一个W / H问题),以及BLoC / event的其他出色功能基于状态的管理(历史快照,时间机器,事件重播,关注点分离,可测试性等)

  

我问这个问题是因为我遇到一个没有中央导航管理解决方案的问题。

关于您的问题,我有什么可以帮助您的吗?

答案 1 :(得分:0)

我当前正在做的是:

  1. 注册一个NavigatorBloc并在构造函数中接收一个NavigatorState,并接收操作以导航到应用程序中的不同页面,例如:GoToHomePageActionGoToRegisterPageAction,{{1} }。

在您的App小部件中,您注册NavigatorActionPop并提供附加到NavigatorBloc小部件的导航键。

MaterialApp

然后在@override Widget build(BuildContext context) { return BlocProvider<NavigatorBloc>( bloc: NavigatorBloc(navigatorKey: widget.navigatorKey), child: MaterialApp( navigatorKey: widget.navigatorKey, title: 'Medicine Tracker', theme: ThemeData( primarySwatch: Colors.red, scaffoldBackgroundColor: Colors.white ), home: HomePage(), ), ); } 旁边检查操作并导航到所需页面:

NavigatorBloc

希望有帮助。