Flutter: DropdownButton SetState不起作用
Flutter: DropdownButton SetState不起作用
我有一个DropDownButton,它从一个SQLite数据库中获取数据填充,对于我的应用来说目前还可以。但是在选择一个条目后,DropDownButton没有显示选定的条目,只显示了提示。为了检查我的条目,我尝试使用选定的条目填充一个文本字段,但是这个字段也没有改变。这是我DropDownButton的代码:
List
DropdownMenuItem selectedTeam;
DropdownButton(
hint: Text("选择"),
value: selectedTeam,
onChanged: (value) {
setState(() {
_teamController.text = value.name;
selectedTeam = value;
});
},
items: teamList,
),
实际上,我在initstate中使用一个代码段填充了teamList:
super.initState();
teamList = [];
db.getData().then((listMap) {
listMap.map((map) {
print(map.toString());
return getDropDownWidget(map);
}).forEach((dropDownMenuItem) {
teamList.add(dropDownMenuItem);
});
setState(() {});
});
以及这个:
DropdownMenuItem
return DropdownMenuItem
value: map['team'],
child: Text(map['team']),
);
}
在我的dbhelper文件中,我有以下代码:
Future
>> getData() async {
var dbClient = await db;
return await dbClient.rawQuery('SELECT team FROM teamTable');
}
问题的出现的原因:
问题出现的原因是在从SQLite数据库中获取数据填充teamList时,代码中缺少了一个变量dropDownItem的定义。
解决方法:
在代码中添加dropDownItem的定义,并将其作为返回值传递给map()函数。同时,使用await关键字等待从数据库中获取数据的操作完成。
以下是修改后的代码:
teamList = [];
await db.getData().then((listMap) {
listMap.map((map) {
print(map.toString());
String dropDownItem = getDropDownWidget(map);
return dropDownItem;
}).forEach((dropDownItem) {
teamList.add(dropDownItem);
});
setState(() {});
});
以上是解决问题的方法,希望对你有所帮助。