如何使用SearchDelegate在Cloud Firestore上按字母搜索?

时间:2019-05-24 15:50:18

标签: flutter dart google-cloud-firestore

我有一个Book App,所有图书信息都存储在Cloud Firestore中。

要搜索,我需要输入该书的全名,并在网格中显示。

我有一个名为“小写”的字段,当添加书籍时,该应用会复制书籍的名称并在存储到该字段之前转换为小写。

Firestore.instance.collection(“ books”)         .where(“ lowercase”,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]);
              });
        },
      ),
    );
  }
}

0 个答案:

没有答案