Реализовать поиск в данных FutureBuilder

#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)