我有一个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]);
});
},
),
);
}
}