如何过滤 rxdart 中的 observable 列表
Posted
技术标签:
【中文标题】如何过滤 rxdart 中的 observable 列表【英文标题】:How to filter a list of obseravble in rxdart 【发布时间】:2019-06-27 06:12:59 【问题描述】:我正在尝试在 rxdart 中实现 bloc 模式。我正在尝试构建 app 类型的 todo 应用程序。我实现了显示列表中的所有项目,但我想要的不是在不同部分显示已完成和未完成的项目。但是我无法根据在 rxdart 上完成来过滤项目。
import 'package:rxdart/rxdart.dart';
import '../models/ShoppingItem.dart';
class ShoppingItemBloc
final _shoppingItems = BehaviorSubject<List<ShoppingItem>>
(seedValue: []);
Observable<List<ShoppingItem>> get allShoppingItems =>
_shoppingItems.stream;
//Getter to implement
Observable<List<ShoppingItem>> get completedShoppingItems =>
dispose()
_shoppingItems.close();
我想要的是获得完整的 shoppingItems 。 ShoppingItem 类有一个布尔属性 completed 。我想在此基础上对其进行过滤。
任何帮助将不胜感激
【问题讨论】:
【参考方案1】:您可以根据需要使用流中的位置进行过滤。由于您正在观察项目列表,因此您需要在过滤单个项目之前进行映射。在我们的例子中是这样的。
Observable<List<ShoppingItem>> get completedShoppingItems =>
_shoppingItems.stream.map((itemList) =>
itemList.where((item) => item.completed));
【讨论】:
你需要把.toList()放在最后 是否可以返回满足条件的单个项目? 是的,你可以。只需使用 firstWhere 而不是 where。这将返回满足条件的第一个项目。更多阅读api.dart.dev/stable/2.9.3/dart-core/Iterable/firstWhere.html以上是关于如何过滤 rxdart 中的 observable 列表的主要内容,如果未能解决你的问题,请参考以下文章
Rxdart combinelaststream 功能不起作用
如何做一个 switchmap 或任何更好的方法来替换 RxDart 中的值