Flutter-rxdart-多次读取流

时间:2019-03-01 12:55:46

标签: dart flutter rxdart bloc

我有一个简单的应用,其中有2个标签,我正在尝试为您提供集团模式来移动数据。

流程1: 1.应用启动群组是使用种子值创建的 2.为页面运行构建方法,并显示数据 3.用户切换到另一个选项卡 4.用户切回,在这种情况下,由于已经读取过一次蒸汽,因此不会显示任何数据。

一种选择是重新订阅以再次发送种子值。

流程2: 1.应用启动群组是使用种子值创建的 2.为页面运行构建方法,并显示数据 3.用户更改过滤器-加载流数据的触发 3.用户切换到另一个选项卡 4.用户切回,在这种情况下,由于已经读取过一次蒸汽,因此不会显示任何数据。

在这种情况下,我希望过滤器保持原状,并且不想使用种子值

集团

    class DemoBloc {

final DemoApi demoApi;

Stream<String> _results = Stream.empty();
Stream<String> get results => _results;

  BehaviorSubject<String> _tabName =
     BehaviorSubject<String>.seeded('abc');
  // BehaviorSubject<String> _tabName =
  //     BehaviorSubject<String>();

    Sink<String> get tabName => _tabName;  

    DemoBloc(this.demoApi) {
      print('initialized');
      _results = _tabName
        .asyncMap((tab) => tab)
        .asBroadcastStream();

    }

    void dispose() {
    _tabName.close();
  }
}

1 个答案:

答案 0 :(得分:0)

当我使用行为主题时,这不应该成为问题,经调查,我发现在某些情况下重新创建了集团,从而导致了问题。

我如何找到

将日志添加到了bloc构造函数 向Bloc提供者添加了日志-并记录了调用者

结果

当我关闭showSearch时-它触发了重新创建块的父对象的构建方法。

解决方案 将提供程序上移了一层,因此即使多次调用构建方法也不会导致问题 这仍然没有解决,因为我使用的是pushReplacement,pushReplacement导致上下文创建了一个新的块。 最终将提供程序移到顶部,所以我的主要应用是提供程序的子级。由于导航器是材料的一部分,因此即使使用pushReplacement也可以解决该问题。