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

Flutter:从SQLite读取数据到DropdownMenu遇类型错误求助

解决SQLite读取数据填充DropdownMenu的TypeError问题

报错_TypeError (type 'Future' is not a subtype of type 'List')的核心原因是:readData是异步函数,直接把它的返回值赋值给List<String> listA时,得到的是一个Future对象,而非实际的字符串列表。

以下是修正后的完整代码及关键改动说明:

关键改动点

  • 初始化listA为空列表,避免直接赋值Future对象
  • 在initState生命周期中调用异步函数获取数据,获取完成后通过setState更新列表
  • 转换SQLite查询结果:query返回的是List<Map>结构,需要提取其中的nom_A字段转为字符串列表
  • 添加数据加载状态判断,避免列表为空时调用listA.first报错
readData(table) async {
  var connection = await db;
  return await connection.query('SELECT nom_A FROM tab_A');
}

class DropdownMenuA extends StatefulWidget {
  const DropdownMenuA({super.key});

  @override
  State<DropdownMenuA> createState() => _DropdownMenuAState();
}

class _DropdownMenuAState extends State<DropdownMenuA> {
  List<String> listA = [];
  String? selectedValue;

  @override
  void initState() {
    super.initState();
    _loadData();
  }

  // 异步加载数据并更新状态
  _loadData() async {
    final data = await readData('tab_A');
    // 转换查询结果为字符串列表
    setState(() {
      listA = data.map((row) => row['nom_A'] as String).toList();
      // 初始化选中值
      if (listA.isNotEmpty) {
        selectedValue = listA.first;
      }
    });
  }

  @override
  Widget build(BuildContext context) {
    // 数据未加载完成时显示占位组件
    if (listA.isEmpty) {
      return const CircularProgressIndicator();
    }

    return DropdownMenu<String>(
      initialSelection: selectedValue,
      onSelected: (String? value) {
        setState(() {
          selectedValue = value;
        });
      },
      dropdownMenuEntries: listA.map<DropdownMenuEntry<String>>((String value) {
        return DropdownMenuEntry<String>(value: value, label: value);
      }).toList(),
    );
  }
}

额外说明

  • 确保db是已正确初始化的SQLite数据库实例
  • 如果nom_A字段可能为null,需要添加空值判断(比如用row['nom_A']?.toString() ?? '')
  • 加载状态的占位组件可以根据需求替换为其他样式(比如文本提示)

内容的提问来源于stack exchange,提问作者Jef

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 19:05:09