首页 > 解决方案 > 异步方法在 initState 中无法正常工作

问题描述

我在 initState 中执行这两个函数(按此顺序):

  getUsers() async {
    usersStream = authBloc.getUsers();
    usersStream.listen((allUsers) {
      for (ApplicationUser user in allUsers) {
        users.add(user.username);
      }
    });
  }
  fetchEvent() async {
    await eventBloc.getEvent(widget.eventId).then((value) {
      event = value;
      title.text = event.title;
      for (var j = 0; j < event.dienstMap["Besetzung"].length; j++) {
        besetzungsList.add(event.dienstMap["Besetzung"][j]);
      }
      for (var i = 0; i < event.dienstMap["Aufgabe"].length; i++) {
        aufgabenList.add(event.dienstMap["Aufgabe"][i]);
        zeitList.add(event.dienstMap["Aufgabe"][i]);
        teamList.add(event.dienstMap["Team"][i]);

        dataTableRows.add(DataRow(
          cells: [
            DataCell(
              Text(event.dienstMap["Aufgabe"][i]),
              onTap: () {
                removeRow(i);
              },
            ),
            DataCell(
              Text(event.dienstMap["Zeit"][i]),
              onTap: () {},
            ),
            DataCell(
              Text(event.dienstMap["Team"][i]),
              onTap: () {},
            ),
            DataCell((i > event.dienstMap["Besetzung"].length - 1 == true)
                ? DropDown(
                    hint: "Wählen",
                    users: users,
                    besetzungsListChanged: (String value) {
                      besetzungsList.removeAt(i);
                      besetzungsList.insert(i, value);
                    },
                    fromDropDown: (bool value) => fromDropDown = value,
                  )
                : DropDown(
                    hint: event.dienstMap["Besetzung"][i],
                    users: users,
                    besetzungsListChanged: (String value) {
                      besetzungsList.removeAt(i);
                      besetzungsList.insert(i, value);
                      //besetzungsList.replaceRange(start, end, replacement)
                    },
                    fromDropDown: (bool value) => fromDropDown = value,
                  ))
          ],
        ));
      }
    });
  }

fetchEvent我使用users列表的方法中,我在方法中添加值getUsers

问题是,当fetchEvent方法被执行时,列表的值不存在。热重载后,值在那里,我可以使用下拉按钮。

标签: flutter

解决方案


推荐阅读