颤振-rxdart-多次读取流

颤振-rxdart-多次读取流,dart,flutter,rxdart,bloc,Dart,Flutter,Rxdart,Bloc,我有一个简单的应用程序,其中有两个标签,我正试图向你的集团模式移动数据 流程1: 1.App starts bloc是使用种子值创建的 2.为页面运行Build方法并显示数据 3.用户切换到另一个选项卡 4.用户切换回,在这种情况下,由于蒸汽已被读取一次,因此不会显示任何数据 一种选择是重新订阅以再次发送种子值 流程2: 1.App starts bloc是使用种子值创建的 2.为页面运行Build方法并显示数据 3.用户更改过滤器-加载哪些流数据 3.用户切换到另一个选项卡 4.用户切换回,在

我有一个简单的应用程序,其中有两个标签,我正试图向你的集团模式移动数据

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

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

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

在这种情况下,我希望过滤器保持在原位,而不希望使用种子值

集团


当我使用行为主题时,这本不应该是一个问题,经过调查,我发现在某些情况下,集团再次被创建,这导致了问题

我怎么找到的

向bloc构造函数添加了日志 向bloc provider添加了日志-也记录了调用者

结果

当我取消showSearch时,它触发了父对象的构建方法,该父对象重新创建了bloc

解决方案 将提供程序移动到上面的一个级别,所以即使多次调用build方法也不会导致问题 这仍然没有解决它,因为我使用了pushReplacement,pushReplacement导致上下文创建了一个新的bloc。 最后将提供者移动到顶部,因此我的material应用程序是提供者的子应用程序。由于navigator是材料的一部分,因此即使在使用pushReplacement时也解决了该问题

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