Как я могу вызвать setstate из другого файла? - PullRequest
0 голосов
/ 26 февраля 2020

У меня есть класс:

class FavoritesState extends State<Favorites> {
  var configOk = isConfigLoaded;
  @override
  Widget build(BuildContext context) {
    if (configOk) {
      return Padding(
        padding: EdgeInsets.only(top: 10),
        child: ListView.builder(
          itemCount: stationList.length,
          itemBuilder: (context, position) {
            return StationCard(stationList[position]);
          },
        ),
      );
    } else {
      return LoadingScreen();
    }
  }

  void callback() {
    setState(() {
      this.configOk = true;
    });
  }
}

И у меня есть метод:

Future<http.Response> getConfig() async {
    //Load Config 
    isConfigLoaded = true;
}

Мне нужно в конце этого вызова метода setstate в FavoritesState и загрузить туда информацию. Как я могу это сделать? Спасибо.

1 Ответ

0 голосов
/ 26 февраля 2020

Вы также можете использовать FutureBuilder, если вы обновляете состояние виджета только один раз. FutureBuilder заставит ваш виджет перестроиться, как только ваш getConfig() вызов будет завершен. Это упростит вещи:

class Favorites extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return FutureBuilder(
      future: getConfig(),
      builder: (context, snapshot) {
        if (snapshot.data == null) {
          // display the loading screen as long as your getConfig() call hasn't finished
          return LoadingScreen();
        }
        return Padding(
          padding: EdgeInsets.only(top: 10),
          child: ListView.builder(
            itemCount: stationList.length,
            itemBuilder: (context, position) {
              return StationCard(stationList[position]);
            },
          ),
        );
      },
    );
  }
}

А затем настройте ваш вызов на что-то вроде этого:

Future<http.Response> getConfig() async {
  //Load Config

  // return your result
  return result;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...