如何过滤流颤动中的可观察列表
How to filter a list of obseravble in stream flutter
我需要使用流过滤我的列表。我已经有一个可以拉取所有客户端的流,现在我想过滤掉它们。
我的这段代码运行正常,它拉取客户端并在列表视图中显示我。我只想过滤从主流获取的数据。有知道的可以帮帮我吗?
class ClientesControles extends BlocBase {
final ClienteService clienteService;
ClientesControles(this.clienteService);
BuildContext _context;
init(BuildContext context) {
_context = context;
}
Observable<List<ClienteModel>> get clientesStream => clienteService.clientes;
final _stringFiltroController = BehaviorSubject<String>();
Observable<String> get stringFiltroFluxo => _stringFiltroController.stream;
Sink<String> get stringFiltroEvent => _stringFiltroController.sink;
@mustCallSuper
void dispose() {
_cadnomecliente.close();
_cadnomefcliente.close();
_cadtelcliente.close();
_cademailcliente.close();
_cadidcliente.close();
_stringFiltroController.close();
}
}
Class ClienteService{
Observable<List<ClienteModel>> get clientes =>
Observable(collection.snapshots().map((item) => item.documents
.map<ClienteModel>((item) => ClienteModel.fromJson(item.data))
.toList()));
}
要过滤流,请添加 where 子句:
Observable<List<ClienteModel>> get clientes =>
Observable(collection.snapshots().map((item) => item.documents
.where((item) => hasWhatIWant(item))
.map<ClienteModel>((item) => ClienteModel.fromJson(item.data))
.toList()));
bool hasWhatIWant(item){
//some check
}
我遇到了类似的问题,并与它抗争了 3 天,直到我找到这个 post...谢谢...我的只是有点不同
Observable<List<Contact>> get contacts => _contactsListFetcher.stream
.map((s) => s.where((c) => hasFilteredContent(c)).map((i) => i).toList());
bool hasFilteredContent(Contact contact) {
return contact.firstName.toLowerCase().contains(currentFilter.toLowerCase()) || contact.lastName.toLowerCase().contains(currentFilter.toLowerCase());
}
我需要使用流过滤我的列表。我已经有一个可以拉取所有客户端的流,现在我想过滤掉它们。
我的这段代码运行正常,它拉取客户端并在列表视图中显示我。我只想过滤从主流获取的数据。有知道的可以帮帮我吗?
class ClientesControles extends BlocBase {
final ClienteService clienteService;
ClientesControles(this.clienteService);
BuildContext _context;
init(BuildContext context) {
_context = context;
}
Observable<List<ClienteModel>> get clientesStream => clienteService.clientes;
final _stringFiltroController = BehaviorSubject<String>();
Observable<String> get stringFiltroFluxo => _stringFiltroController.stream;
Sink<String> get stringFiltroEvent => _stringFiltroController.sink;
@mustCallSuper
void dispose() {
_cadnomecliente.close();
_cadnomefcliente.close();
_cadtelcliente.close();
_cademailcliente.close();
_cadidcliente.close();
_stringFiltroController.close();
}
}
Class ClienteService{
Observable<List<ClienteModel>> get clientes =>
Observable(collection.snapshots().map((item) => item.documents
.map<ClienteModel>((item) => ClienteModel.fromJson(item.data))
.toList()));
}
要过滤流,请添加 where 子句:
Observable<List<ClienteModel>> get clientes =>
Observable(collection.snapshots().map((item) => item.documents
.where((item) => hasWhatIWant(item))
.map<ClienteModel>((item) => ClienteModel.fromJson(item.data))
.toList()));
bool hasWhatIWant(item){
//some check
}
我遇到了类似的问题,并与它抗争了 3 天,直到我找到这个 post...谢谢...我的只是有点不同
Observable<List<Contact>> get contacts => _contactsListFetcher.stream
.map((s) => s.where((c) => hasFilteredContent(c)).map((i) => i).toList());
bool hasFilteredContent(Contact contact) {
return contact.firstName.toLowerCase().contains(currentFilter.toLowerCase()) || contact.lastName.toLowerCase().contains(currentFilter.toLowerCase());
}