【发布时间】:2020-02-07 00:51:01
【问题描述】:
我有这样一种情况,当所有收听ValueObservable 的StreamSubscriptions 都关闭时,没有新的StreamSubscriptions 之后订阅接收任何数据事件。
这是正确的行为吗?如果是这样,我该如何预防?
【问题讨论】:
我有这样一种情况,当所有收听ValueObservable 的StreamSubscriptions 都关闭时,没有新的StreamSubscriptions 之后订阅接收任何数据事件。
这是正确的行为吗?如果是这样,我该如何预防?
【问题讨论】:
这里最好的方法是使用 BloC 模式,在 bloc 中,您可以处理需要执行以下操作的 observables 和流:
class LoginBloC implements BaseBloC {
UserRepository _userRepository;
LoginBloC(this._userRepository);
BehaviorSubject<Result<String>> _loginController = new BehaviorSubject();
Stream<Result<String>> get loginResult => _loginController.stream;
void login(String email, String password) async {
updateErrorFromResult(null);
isLoading = true;
final res = await _userRepository.login(email, password);
updateErrorFromResult(res);
sinkAdd(_loginController, res);
isLoading = false;
}
@override
void dispose() {
_loginController.close();
}
}
正如您在此示例中所见,您创建了流,然后在 dispose 方法中关闭它们
所以在你看来,你使用 strem 来做这个:
@override
void initState() {
super.initState();
bloc.loginResult.listen((res) {
if (res is ResultSuccess<String>) {
NavigationUtils.pushReplacement(
context,
HomePage(
));
}
});
}
在这种情况下,当登录响应成功时执行导航
【讨论】: