所有StreamSubscription均关闭后无法订阅ValueObservable

时间:2019-10-09 16:14:19

标签: flutter dart rxdart

我遇到一种情况,当所有StreamSubscriptions监听者ValueObservable都关闭时,之后没有订阅的新StreamSubscriptions会收到任何数据事件。

这是适当的行为吗?如果可以,我该如何预防呢?

1 个答案:

答案 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(
            ));
      }
    });
  }

在这种情况下,您将在登录响应成功后执行导航