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