我尝试在firestore集合中实现搜索自动完成功能。该功能仅适用于从firestore查询产品的回调返回的列表的第一个元素。即使用户输入与列出的产品匹配,它也不会返回其余元素的结果。
下面是我的TypeAhead widget:
TypeAheadField<Product>(
debounceDuration: const Duration(milliseconds: 1000),
suggestionsCallback: (searchString) async {
return await FirebaseCrud.getProductSuggestion(
searchString, widget.categoryId)
.then((value) => value.first);
},
itemBuilder: (context, itemData) {
return ListTile(title: Text(itemData.productName));
},
onSuggestionSelected: (suggestion) {
print(suggestion.productName);
},
),
下面是我的回调实现:
static Future<Stream<List<Product>>> getProductSuggestion(
String searchString, String categoryId) async {
final products = FirebaseFirestore.instance
.collection('products')
.snapshots()
.map((snapshot) => snapshot.docs
.map((doc) => Product.fromJson(doc.data()))
.takeWhile((value) {
print('name: ${value.productName.toLowerCase()}');
print('searched: ${searchString.toLowerCase()}');
return value.productName
.toLowerCase()
.contains(searchString.toLowerCase());
}).toList());
return products;
}
预期的行为是在用户输入时动态地建议产品。然而,它只建议用户输入是否与firestore回调返回的第一个列表项匹配。对于其余部分,即使用户输入与firestore中返回的产品回调列表中的产品匹配,它也不会显示任何结果。我似乎不知道我做错了什么。
1条答案
按热度按时间vptzau2j1#