如何使用 bloc 未来获取流从后端过滤数据?

Posted

技术标签:

【中文标题】如何使用 bloc 未来获取流从后端过滤数据?【英文标题】:How to filter data from backend using bloc future fetch stream? 【发布时间】:2019-01-22 10:30:41 【问题描述】:

我在 bloc 上有这个方法

fetchProductAttribute(int _prodId) async 
List<ProductAttribute> productAttribute = await _repository.fetchProductAttribute(_prodId).catchError((err) => _fetcher.addError(err));
_fetcher.sink.add(productAttribute);

这将调用存储库,然后将 API 休息到后端。现在我想过滤这些数据。

我会修改它,但它不起作用......如何正确地做到这一点?

fetchProductAttribute(int _prodId) async 
List<ProductAttribute> productAttribute = await _repository.fetchProductAttribute(_prodId).catchError((err) => _fetcher.addError(err));
for(var c in productAttribute)
  if(c.variant==true)
    _fetcher.sink.add(productAttribute);
  


所有数据仍在显示...我只想在屏幕上显示变量为 true 的数据。如何做到这一点?

我看过一篇关于如何使用 StreamSubscription here 和 here 对 Stream 进行过滤的文章,但这不是我想要的。我想从 REST 的早期部分中过滤掉。

【问题讨论】:

使用Iterable#where @pskink 谢谢这对我来说是新的......更多的函数式编程我将使用这种方法看起来更好 【参考方案1】:

正如一条评论所说,在列表中使用where 运算符。

fetchProductAttribute(int _prodId) async 
    List<ProductAttribute> productAttribute = await _repository.fetchProductAttribute(_prodId).catchError((err) => _fetcher.addError(err));
    productAttribute = productAttribute.where((c) => c.variant == true).toList()
    _fetcher.sink.add(productAttribute);

【讨论】:

过滤不正确或结果没有显示在小部件中? sorry2 它的工作可能是热重载问题。谢谢。现在我认为即使在我的问题上使用 for 循环也应该有效。 你的 for 循环的问题是你刚刚输入了一个 if。从 API 检索到的原始列表是原始列表。此外,您向接收器添加了多次。 c =&gt; c.variant == true 可以编译吗?我认为应该是(c) =&gt; c.variant == true

以上是关于如何使用 bloc 未来获取流从后端过滤数据?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用rxjs从后端api获取头属性?

如何从后端路由器获取错误消息?

如何使用节点 js 从后端 API 请求 apikey?

如何修改 Angular 组件以从后端获取信息?

如何正确过滤角度数组

如何使用 Swift Async 方法从后端数据库中检索数据?