【问题标题】:Call Future after OnChanged function executes in Flutter在 Flutter 中执行 OnChanged 函数后调用 Future
【发布时间】: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


【解决方案1】:

因此,使 onChanged 函数异步是解决它的方法。

onChanged: (PetType newValue) async {
              selectedValuePetType = newValue;
              isRaceVisible = selectedValuePetType != PetType.Otro;
              await updatePetRaces(selectedValuePetType.index);
              setState(() {});
            },

【讨论】:

    猜你喜欢
    • 2021-09-10
    • 1970-01-01
    • 2021-07-13
    • 2020-01-21
    • 2020-11-21
    • 1970-01-01
    • 2020-12-15
    • 2019-07-06
    • 2021-08-29
    相关资源
    最近更新 更多