Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Dart 航行流场的颤振群_Dart_Flutter - Fatal编程技术网

Dart 航行流场的颤振群

Dart 航行流场的颤振群,dart,flutter,Dart,Flutter,我刚开始讨论集团模式,但我有一个问题: 1) 您是否应该使用集团模式来确定路线是否应该更改? 示例:身份验证对象更改为未经身份验证的,因此侦听器应处理路由更改 2) BLoC模式是否应该仅用于UI状态并处理UI更改上的路由更改? 示例:用户单击登录并导航到主页屏幕 我问这个问题是因为我面临一个没有中央导航管理解决方案的问题 此代码现在在我的集团中: loggedIn.listen((AuthResponse user) { currentUserSubject.add(user);

我刚开始讨论集团模式,但我有一个问题:

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

2) BLoC模式是否应该仅用于UI状态并处理UI更改上的路由更改? 示例:用户单击
登录
并导航到
主页
屏幕

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

此代码现在在我的集团中:

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),
      ));
    });
loggedIn.listen((AuthResponse用户){
currentUserSubject.add(用户);
导航器。更换(
_背景,
PageRouteBuilder(
页面生成器:(上下文、动画1、动画2){
返回主页();
},
transitionsBuilder:(上下文、动画、子对象){
返回新的幻灯片转换(
孩子:孩子,
职位:新吐温(
开始:常数偏移(0.0,1.0),
结束:偏移0.0,
).制作动画(动画),
);
},
转换持续时间:持续时间(毫秒:400),
),
);
},onError:(错误){
Scaffold.of(_context).showSnackBar(新的SnackBar(
内容:新文本(错误消息),
));
});

我看到这里有两个是/否问题(与W/H问题相反),我的答案都是肯定的。原因是,使用BloC和navigation,如果应用程序崩溃,您实际上可以恢复当前屏幕(自动保存状态和状态恢复必须到位,但这是另一个W/H问题),以及基于BloC/事件的状态管理的其他优秀功能(历史快照、时间机器、事件回放、独立关注点、可测试性等)

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


关于你的问题,有什么我可以帮忙的吗?

我目前正在做的是:

  • 注册一个
    NavigatorBloc
    ,它在构造函数中接收一个
    NavigatorState
    ,并接收导航到应用程序中不同页面的操作,例如:
    GoToHomePageAction
    GoToRegisterPageAction
    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(),
          ),
        );
      }
    

    希望能有所帮助。

    我确实做过这件事,我很想看看其他人对这件事的看法。在我的例子中,应用程序中只有大约4个屏幕和4个导航按钮来更改页面,因此这是不必要的开销。如果有很多页面,并且用户有多种方式来更改它们,那么这可能是值得的。另一个缺点是nav阵营不能很好地翻译到网络上,至少在没有搞砸SEO的情况下会使
    的工作变得复杂
    class NavigatorBloc extends Bloc<NavigatorAction, dynamic>{
      final GlobalKey<NavigatorState> navigatorKey;
      NavigatorBloc({this.navigatorKey});
    
      @override
      dynamic get initialState => 0;
    
      @override
      Stream<dynamic> mapEventToState(NavigatorAction event) async* {
        if(event is NavigatorActionPop){
          yield navigatorKey.currentState.pop();
        }
      }
    }