我遇到一种情况,当所有StreamSubscriptions
监听者ValueObservable
都关闭时,之后没有订阅的新StreamSubscriptions
会收到任何数据事件。
这是适当的行为吗?如果可以,我该如何预防呢?
答案 0 :(得分:-1)
这里最好的方法是使用BloC模式,并且在团块中,您可以处理可观察对象和需要执行以下操作的流:
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(
));
}
});
}
在这种情况下,您将在登录响应成功后执行导航