【问题标题】:Can't subscribe to ValueObservable after all StreamSubscriptions are closed关闭所有 StreamSubscriptions 后无法订阅 ValueObservable
【发布时间】:2020-02-07 00:51:01
【问题描述】:

我有这样一种情况,当所有收听ValueObservableStreamSubscriptions 都关闭时,没有新的StreamSubscriptions 之后订阅接收任何数据事件。

这是正确的行为吗?如果是这样,我该如何预防?

【问题讨论】:

    标签: flutter dart rxdart


    【解决方案1】:

    这里最好的方法是使用 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(
                ));
          }
        });
      }
    

    在这种情况下,当登录响应成功时执行导航

    【讨论】:

      猜你喜欢
      • 2021-12-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-30
      • 2021-03-02
      相关资源
      最近更新 更多