我开始使用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),
));
});
答案 0 :(得分:0)
我看到那里有2个是/否问题(与W / H问题相反),我对两个问题的回答都是。原因是使用BloC和导航,如果应用程序崩溃,您实际上可以恢复当前屏幕(必须具有自动保存状态和状态恢复功能,但这是另一个W / H问题),以及BLoC / event的其他出色功能基于状态的管理(历史快照,时间机器,事件重播,关注点分离,可测试性等)
我问这个问题是因为我遇到一个没有中央导航管理解决方案的问题。
关于您的问题,我有什么可以帮助您的吗?
答案 1 :(得分:0)
我当前正在做的是:
NavigatorBloc
并在构造函数中接收一个NavigatorState
,并接收操作以导航到应用程序中的不同页面,例如:GoToHomePageAction
,GoToRegisterPageAction
,{{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
希望有帮助。