You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter异步函数问题:无法提取名称字段,返回完整文档数据

解决异步搜索函数返回完整文档而非名称列表的问题

你的代码存在两个关键问题导致输出不符合预期:

  1. 变量名拼写错误:定义的查询变量是kysely,但调用collection.search时传入的是questionnare,这会导致查询逻辑失效(甚至可能抛出未定义变量的错误)。
  2. 未提取目标字段:你将整个文档的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 00:25:19