我有一个简单的应用,其中有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();
}
}
答案 0 :(得分:0)
当我使用行为主题时,这不应该成为问题,经调查,我发现在某些情况下重新创建了集团,从而导致了问题。
我如何找到
将日志添加到了bloc构造函数 向Bloc提供者添加了日志-并记录了调用者
结果
当我关闭showSearch时-它触发了重新创建块的父对象的构建方法。
解决方案 将提供程序上移了一层,因此即使多次调用构建方法也不会导致问题 这仍然没有解决,因为我使用的是pushReplacement,pushReplacement导致上下文创建了一个新的块。 最终将提供程序移到顶部,所以我的主要应用是提供程序的子级。由于导航器是材料的一部分,因此即使使用pushReplacement也可以解决该问题。