我正在使用BLOC模式编写Flutter应用程序。我目前正在尝试搜索数据库并在屏幕上返回结果列表。
第一次搜索将完成。问题是当我按下“后退”按钮并尝试进行第二次搜索时。尚未清除第一个搜索结果。而是将它们保留在屏幕上,并将新的搜索结果放置在它们下方。
简而言之,这就是我正在做的事情。(我正在使用RxDart库)
1。)定义输入和输出流:
PublishSubject<SearchRowModel> _searchFetcher =
PublishSubject<BibSearchRowModel>();
BehaviorSubject<Map<int, SearchRowModel>> _searchOutput =
BehaviorSubject<Map<int, SearchRowModel>>();
2。)在类构造函数中将流一起添加。
_searchFetcher.stream.transform(_resultsTransformer()).pipe(_searchOutput);
3。)将结果添加到提取程序流中
results.searchRows.forEach((SearchRowModel row) {
_searchFetcher.sink.add(row);
});
4。)使用ScanStreamTransformer创建结果图。
_resultsTransformer() {
return ScanStreamTransformer(
(Map<int, SearchRowModel> cache, SearchRowModel row, index) {
cache[index] = row;
return cache;
},
<int, SearchRowModel>{},
);
}
通过调试,我发现步骤4中的代码似乎是问题所在。该缓存(或累加器)不会在两次搜索之间重置。它只是不断向地图添加其他结果。
我还没有找到一种可以在累加器/缓存中重置地图的方法。我什至尝试完全销毁流并重新创建它们,但是SearchstreamTransformer累加器中的原始搜索数据仍然存在。