У меня есть приложение 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]);
});
},
),
);
}
}