我想从我的表中恢复数据并将它们放入我的下拉列表中。 我收到一条错误消息:_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(),
);
}
}
为
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(),
);
}
}
请告诉我是否有效。