Flutter异步函数问题:无法提取名称字段,返回完整文档数据
解决异步搜索函数返回完整文档而非名称列表的问题
你的代码存在两个关键问题导致输出不符合预期:
- 变量名拼写错误:定义的查询变量是
kysely,但调用collection.search时传入的是questionnare,这会导致查询逻辑失效(甚至可能抛出未定义变量的错误)。 - 未提取目标字段:你将整个文档的
data对象添加到结果列表,而非仅提取name字段的值。
修复后的完整代码
import 'package:database/database.dart'; import 'package:database/filter.dart'; main() async { var database = MemoryDatabaseAdapter().database(); var collection = database.collection('names'); await collection.insert(data: {'name': 'Jonathan'}); await collection.insert(data: {'name': 'John'}); await collection.insert(data: {'name': 'Steve'}); var list = await fetchedNames(collection, 'Jo'); for (var i = 0; i < list.length; i++) { print(list[i]); } } Future<List<String>> fetchedNames(collection, String searchKeyword) async { // 修正变量名,确保查询对象正确传入 var query = Query( filter: MapFilter({ 'name': KeywordFilter(searchKeyword) }) ); var results = await collection.search(query: query); var documents = results.snapshots; var nameList = []; for (var doc in documents) { // 提取data中的name字段值,而非整个data对象 nameList.add(doc.data['name']); } return nameList.cast<String>(); }
关键修改说明
- 修正变量名:将
kysely改为query,并在collection.search中传入正确的query变量,确保过滤逻辑正常执行。 - 提取name字段:循环中不再添加
doc.data,而是获取doc.data['name'],这样结果列表中就只包含名称字符串。 - 添加类型注解:给函数返回值和参数加上类型注解(
Future<List<String>>、String searchKeyword),让代码更清晰规范,同时避免类型警告。
现在运行代码,输出会符合预期:
Jonathan John
内容的提问来源于stack exchange,提问作者mostexerent
相关产品推荐
相关产品推荐

