【发布时间】:2020-12-16 17:17:12
【问题描述】:
我想在 onChanged 函数之后立即执行 Future,因为我需要先更改 selectedPetValueType,然后再为 petType 找到的新 petRaces 调用 API。示例:
如果我选择查找petType = dog,但在此之前我选择了petType = cat,它将显示猫比赛而不是狗,如果我再次将其更改为猫,它将显示狗,因为它有存储onChange函数之前的最后一个值。
代码在这里:
Widget obtainPetsTypeDropdownButton() {
return FutureBuilder(
future: ApiPets.retreivePetRaces(selectedValuePetType.index),
builder: (context, snapshot) {
return Container(
width: 100.0,
child: DropdownButton<PetType>(
style: TextStyle(color: Colors.white),
dropdownColor: Colors.blue[800],
value: selectedValuePetType,
onChanged: (PetType newValue) {
selectedValuePetType = newValue;
isRaceVisible = selectedValuePetType != PetType.Otro;
if (snapshot.connectionState == ConnectionState.done) {
loadedRaces = snapshot.data;
selectedValuePetRace = loadedRaces.first.petRaceId;
setState(() {});
}
},
items: PetType.values.map((PetType classType) {
return DropdownMenuItem<PetType>(
value: classType, child: Text(classType.name));
}).toList()));
},
);
}
【问题讨论】:
-
setState 应该再次调用 build 方法,这将使用新值重建您的小部件树
-
为什么在 setState 里面? @PeterHaddad
-
你在里面是什么意思?您在此处调用
setState(() {});这不是用您在此处分配的新值selectedValuePetType = newValue;重建您的小部件树吗? -
是的,你说得对,但它仍然不起作用,我知道为什么@PeterHaddad
标签: flutter asynchronous dart