我有一个特殊的用例,现在让我头疼了好几个小时。
我确实有一个使用 firebase 和社交登录进行身份验证的应用程序。此外,我还实现了 redux 来管理应用程序状态。
一切都像这样工作正常,但只有当我尝试在需要类数据的屏幕上注销时,FirebaseUser渲染才会失败,因为导航器的转换仍在运行(触发我正在导航的屏幕的重新渲染) )并最终到达所需的位置,但在转换时屏幕出现故障。
我的中间件代码是这样的:
Middleware<RootState> _signOutUser(GlobalKey navigatorKey) {
return (Store<RootState> store, dynamic dynamicAction, NextDispatcher next) {
final SignOut action = dynamicAction;
final NavigatorState nav = navigatorKey.currentState;
next(action);
store.dispatch(AppIsLoading());
Future<dynamic>(() async {
try {
await auth.signOut();
} on PlatformException catch (error) {
return Future<void>.error(error);
}
}).then<void>((dynamic _) {
nav.pushNamedAndRemoveUntil(Routes.home, (Route<dynamic> route) => false);
store.dispatch(UnsetUser());
store.dispatch(AppIsLoaded());
action.completer.complete();
}).catchError((Object response) {
nav.maybePop(nav.context);
action.completer.completeError(response);
store.dispatch(AppIsLoaded());
});
};
}
Run Code Online (Sandbox Code Playgroud)
理想情况下我会这样做:
Middleware<RootState> _signOutUser(GlobalKey navigatorKey) {
return (Store<RootState> store, dynamic …Run Code Online (Sandbox Code Playgroud)