gpt4 book ai didi

flutter - 如何编写依赖于其他下拉菜单的下拉菜单-使用Flutter

转载 作者:行者123 更新时间:2023-12-03 04:45:45 25 4
gpt4 key购买 nike

我有两个Flutter下拉菜单。第一个从数据库加载大学列表,并且运行良好。第二个从数据库加载所选大学的校园。

目前,我正在使用大学下拉菜单的onChanged()函数中的setState(),该函数在80%的时间内有效。其余20%似乎是由于网络速度较慢所致,因此下拉菜单在屏幕刷新之前没有时间进行填充,因此没有显示。如果单击大学下拉菜单,通常将填充两次或三次校园下拉菜单。这是加载代码(其中loadDatabaseSubTable()填充校园下拉列表:

 Container(
decoration: new BoxDecoration(
border: Border.all(width: 1),
borderRadius: new BorderRadius.all(Radius.circular(5.0)),
shape: BoxShape.rectangle,
),
padding: EdgeInsets.symmetric(
horizontal: kContainerPaddingHorizontal,
vertical: kContainerPaddingVertical),
child: DropdownButton<String>(
hint: Text('Select the Institution'),
value: selectedInstitute,
underline: Container(
height: 0,
),
onChanged: (String value) {
// Use setState() to load next dropdown
if (institutionBefore != value) {
setState(() {
// Get matching campuses
dropCampus = [];
campusBuild.institutionId = shInstitutionId;
campusBuild.campusId = '';
loadDatabaseSubTable(
tableName: 'sa_campus_by_institute',
listVariable: dropCampus,
object: campusBuild);
//
selectedInstitute = value;
});
}
},
items: dropInstitution.map((String description) {
return DropdownMenuItem<String>(
value: description,
child: Text(
description,
style: TextStyle(color: Colors.black),
),
);
}).toList(),
),
),

以上方法是解决此问题的正确方法吗?如果是这样,如何确保在下拉列表填满之前没有刷新?

还是使用FutureBuilder处理它更好?

我曾考虑过将所有大学的所有校园首先加载到内存中,但要加载Android应用程序。这似乎在带宽使用方面显得过分杀伤力。

我还有另一个屏幕,其中有6个下拉菜单,每个下拉菜单均取决于上一个屏幕-为每个屏幕使用FutureBuilder似乎是一种处理处理下拉菜单的非常不整洁的方法。提前致谢。

最佳答案

问题在于loadDatabaseSubTable是异步的,您不必等待它完成,因此在它获取setState将会被执行的数据时。

您需要将onChanged更改为异步:

onChanged: (String value) async {

然后等待loadDatabaseSubTable:
await loadDatabaseSubTable(
tableName: 'sa_campus_by_institute',
listVariable: dropCampus,
object: campusBuild);


也可以看看
  • https://dart.dev/codelabs/async-await
  • 关于flutter - 如何编写依赖于其他下拉菜单的下拉菜单-使用Flutter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62339423/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com