Flutter: DropdownButton SetState不起作用

8 浏览
0 Comments

Flutter: DropdownButton SetState不起作用

我有一个DropDownButton,它从一个SQLite数据库中获取数据填充,对于我的应用来说目前还可以。但是在选择一个条目后,DropDownButton没有显示选定的条目,只显示了提示。为了检查我的条目,我尝试使用选定的条目填充一个文本字段,但是这个字段也没有改变。这是我DropDownButton的代码:

List> teamList;

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 getDropDownWidget(Map map) {

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');

}

0
0 Comments

问题的出现的原因:

问题出现的原因是在从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(() {});

});

以上是解决问题的方法,希望对你有所帮助。

0