#flutter #dart #search #async-await #future
#flutter #dart #Поиск #асинхронный-ожидание #будущее
Вопрос:
Я внедрил FutureBuilder для заполнения ListView. Теперь я хочу реализовать функциональность поиска в этом заполненном ListView. Вот код, как я это сделал:
FutureBuilder<ChatGroupListModel>(
future: localChatGroupList,
builder: (context,snapshot){
if (snapshot.connectionState == ConnectionState.done) {
if(snapshot.hasData) {
return ListView.builder(
itemCount: snapshot.data.listChatGroupListModel.length,
itemBuilder: (context, index) {
return ChatTileWidget(
chatGroupModel: snapshot.data.listChatGroupListModel[index],
);
},
);
}else if (snapshot.hasError) {
return Text("${snapshot.error}");
}else return Center(
child: NoDataWidget(),
);
} else return Center(
child: CircularProgressIndicatorWidget()
);
},
);
Теперь я хочу выполнить поиск по этим заполненным данным. Пожалуйста, поделитесь, как я могу это сделать, не вызывая API.
Комментарии:
1. итак, вам нужно
StreamBuilder
(вместоFutureBuilder
) возвращать новыйsnapshot
каждый раз, когда вы вводите «поиск»TextField
2. @pskink то есть вы имеете в виду каждый раз, когда мне приходится вызывать API. Я не хочу вызывать API при каждом изменении символа.
3. нет, это не означает, что вам нужно вызывать API — вы можете вызвать его один раз и использовать
List.where
для фильтрации4. @pskink пожалуйста, предложите, как я могу этого добиться.
5. часть текстового поля:
child: TextField(onChanged: streamController.add)
и теперь вам нужно реализовать поток поиска, например:streamController.stream.debounce(Duration(milliseconds: 500)).asyncMap((query) => call list.where() based on input query text)