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

如何将SQL返回的映射列表转换为Dart纯名称列表?

如何将SQL返回的映射列表转换为Dart纯名称列表?

看起来你现在卡在把SQL返回的带键的映射列表转成纯名称列表这一步了,我来帮你捋捋问题出在哪~

你当前的代码里,indata应该是一个包含多个Map的列表(比如List<Map<String, dynamic>>),但你用asMap()把它转成了以索引为键的新映射,然后forEach的时候直接把整个value(也就是每个{"name": "xxx"}的完整映射)转成字符串塞进了fromSql,这当然和原数据没区别啊——你根本没提取到映射里的name值!

给你两种简单的解决方法,选你顺手的来:

方法一:用map方法(最简洁)

这是Dart里处理列表转换最常用的方式,一行就能搞定:

Future<void> fetchfromSql() async {
  final indata = await _crud.getNames();
  print(indata);
  // 遍历每个映射,提取name字段,再转成列表
  fromSql = indata.map((item) => item['name'] as String).toList();
  // 如果你想过滤掉空字符串(比如你数据里那个""),可以再加个过滤:
  // fromSql = indata.map((item) => item['name'] as String).where((name) => name.isNotEmpty).toList();
  print(fromSql);
}

原理很简单:map会遍历列表里的每个元素(每个都是带name键的映射),把每个元素转换成对应的name值,最后用toList()把Iterable转换成List类型。

方法二:修改你原有的forEach写法

如果你习惯用循环的方式,那直接遍历原列表就行,完全没必要转成asMap():

Future<void> fetchfromSql() async {
  final indata = await _crud.getNames();
  fromSql = [];
  print(indata);
  // 直接遍历indata里的每个映射元素
  for (final item in indata) {
    // 提取当前映射里的name值
    final name = item['name'] as String;
    fromSql.add(name);
    // 同样,要过滤空值的话就加个判断:if (name.isNotEmpty) fromSql.add(name);
  }
  print(fromSql);
}

核心问题就是你之前没有深入到每个映射内部去取name字段,而是把整个映射对象转成字符串添加了,现在调整后就能得到你想要的纯名称列表啦~

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.08 14:49:49