Flutter:恢复组合框中的sqlite数据

问题描述 投票:0回答:1

我想从我的表中恢复数据并将它们放入我的下拉列表中。 我收到一条错误消息:_TypeError(类型“Future”不是类型“List”的子类型) 谢谢你的帮助

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});
//Modif

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

class _DropdownMenuAState extends State<DropdownMenuA> {
  //String dropdownValueA = list1.first;
  List<String> listA = readData(Tab_A);

  @override
  Widget build(BuildContext context) {
    return DropdownMenu<String>(
      initialSelection: listA.first,
      onSelected: (String? value) {
        // This is called when the user selects an item.
        setState(() {
          //dropdownValueA = value!;
        });
      },
      dropdownMenuEntries: listA.map<DropdownMenuEntry<String>>((String value) {
        return DropdownMenuEntry<String>(value: value, label: value);
      }).toList(),
    );
  }
}

flutter dropdown sqflite
1个回答
0
投票

await
调用添加
Future
关键字。喜欢:

List<String> listA = await readData(Tab_A);

为了使用

await
关键字,您还必须使用
async
关键字,例如:

Future<void> fetchData() async {
    List<String> data = await readData(Tab_A);
    setState(() {
      listA = data;
    });
  }

并在

fetchData()
函数中调用此
initState()
函数,例如:

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

最终代码如下所示:

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

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

  Future<void> fetchData() async {
    List<String> data = await readData(Tab_A);
    setState(() {
      listA = data;
    });
  }

  @override
  Widget build(BuildContext context) {
    return DropdownMenu<String>(
      initialSelection: listA.isNotEmpty ? listA.first : null,
      onSelected: (String? value) {
      
        setState(() {
  
        });
      },
      dropdownMenuEntries: listA.map<DropdownMenuEntry<String>>((String value) {
        return DropdownMenuEntry<String>(value: value, label: value);
      }).toList(),
    );
  }
}

请告诉我是否有效。

© www.soinside.com 2019 - 2024. All rights reserved.