大家好,我正在使用BLoC for app我正在开发但有些情况我无能为力,就像你登录时激活API调用并等待结果自然我会发送加载状态和显示加载器但是在那之后完成如何处理例如导航到不同的屏幕 . 我现在有类似的东西
typedef void LoginSuccessCallback();
class LoginBloc(){
LoginBloc(Api this.api,LoginSuccessCallback loginSuccesCallback){
_login.switchMap((ev) => api.login(ev.payload.email,ev.payload.password)).listen((_) => loginSuccessCallback);
}
}
但我确信有更清洁的方法来处理这个我试图搜索一些类似但却找不到任何东西的样本 .
1 回答
Edit: After a few months with this solution in place, I noticed that there are a few problems with it:
Android hardware back button does not work
当您切换"inspect"模式时,该应用会重置 .
无法进行过渡
不保证不显示禁止路线
所以我不再推荐使用这种方法!
对于普通的用户启动导航,您根本不需要BLoC模式 . 只需使用
Navigator
.登录是一种特殊情况 . 遵循BLoC模式,提供
isAuthenticated
流是有意义的:您的应用可能会有2个不同的命名路由树:一个用于登录用户,另一个用于匿名用户:
通常
Navigator
及其命名路由紧密耦合到MaterialApp
,但您也可以定义自己在更新isAuthenticated
流时重建的路径:遗憾的是现在(2018-07-14)there are a 2 conflicting asserts在Flutter代码中你必须删除它才能使上面的代码工作(你可以用你的IDE编辑它):
packages\flutter\lib\src\widgets\app.dart
中的第93和96行