如何重置ScanStreamTransformer累加器?

时间:2019-03-04 20:26:05

标签: dart flutter

我正在使用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累加器中的原始搜索数据仍然存在。

0 个答案:

没有答案