【发布时间】:2021-02-14 16:58:20
【问题描述】:
我有一个根级 BlocListener,它监听我的全局 AuthBloc 以了解身份验证状态的变化,并在用户退出时使用 Navigator 返回登录页面。
一个后代HomePage 小部件也使用该身份验证状态,假设AuthBloc 处于AuthenticatedState 中(如果它正在构建)。但是,在退出后,子 HomePage 会在根 BlocListener 有机会导航回登录之前使用新的 UnauthenticatedState 构建。
class App extends StatelessWidget {
@override
Widget build(BuildContext context) {
// assume AuthBloc has already been provided
return BlocBuilder<AuthBloc, AuthState>(
listener: (context, state) {
if (state is! AuthenticatedState) {
Navigator.pushNamed(context, '/login');
// ^--- I expect this to be called before HomePage gets UnauthenticatedState
}
},
child: HomePage(),
);
}
}
class HomePage extends StatelessWidget {
@override
Widget build(BuildContext) {
return BlocBuilder<AuthBloc, AuthState>(
builder: (context, state) {
// state == Unauthenticated after signing out <------
}
);
}
}
这是预期的行为还是应该有保证的parent->child 更新顺序?处理此问题的推荐模式是什么?
【问题讨论】:
标签: flutter bloc flutter-bloc