Как выполнить поиск по буквам в Cloud Firestore, используя SearchDelegate? - PullRequest
0 голосов
/ 24 мая 2019

У меня есть приложение Book, и вся информация о книгах хранится в Cloud Firestore.

Для поиска мне нужно набрать полное название книги, и оно отобразится в сетке.

У меня есть поле с именем «нижний регистр», при добавлении книг приложение дублирует название книг и преобразует их в нижний регистр перед сохранением в этом поле.

Firestore.instance.collection ( "книга") .where ("нижний регистр", isEqualTo: query.toLowerCase ()). snapshots ();

Как я могу сделать мгновенный поиск, используя SearchDelegate? Пользователь напечатает букву, и ему нужно будет показать все книги с этой буквой / с.

          appBar: AppBar(

            actions: <Widget>[
              IconButton(
                  icon: Icon(Icons.search),
                  onPressed: () async{
                    showSearch(context: context, delegate: DataSearch());
                  }
              )
            ],
          ),

====================


class DataSearch extends SearchDelegate<String> {

  @override
  Widget buildSuggestions(BuildContext context) {

    var streamRef = Firestore.instance.collection("books")
        .where("lowercase", isEqualTo: query.toLowerCase()).snapshots();

    return WillPopScope(
      onWillPop: () async => false,
      child: StreamBuilder(
        stream: streamRef,
        builder: (context, snapshot) {
          if (!snapshot.hasData)
            return Center(child: CircularProgressIndicator(),);
          return GridView.builder(
              padding: EdgeInsets.fromLTRB(16, 16, 16, 8),
              primary: false,
              itemCount: snapshot.data.documents.length,
              gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
                crossAxisCount: 3,
                childAspectRatio: MediaQuery
                    .of(context)
                    .size
                    .width /
                    (MediaQuery
                        .of(context)
                        .size
                        .height),
              ),
              itemBuilder: (context, index) {
                return _buildGridItem(context, snapshot.data.documents[index]);
              });
        },
      ),
    );
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...