如何使用 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 => c.variant == true
可以编译吗?我认为应该是(c) => c.variant == true
以上是关于如何使用 bloc 未来获取流从后端过滤数据?的主要内容,如果未能解决你的问题,请参考以下文章