initState вызывается только при первом добавлении виджета в дерево. Но да, сборка будет вызываться дважды в этом примере, один раз во время инициализации состояния, один раз после разрешения будущего.

рабатываю приложение Flutter, но мне интересно, что мне делать при вызове асинхронного кода из пользовательского интерфейса - скажем, метод сборки виджета пользовательского интерфейса.

Например, мое приложение подключает Firebase через класс обслуживания, который использует стиль Async-Await для получения записей из Firebase. Использование await гарантирует, что метод моего класса обслуживания завершит поиск записей, прежде чем вернуться на сторону пользовательского интерфейса.

Однако, поскольку метод класса обслуживания помечен как асинхронный, он немедленно возвращает Future вызывающему виджету пользовательского интерфейса, и код пользовательского интерфейса продолжает выполняться до завершения метода класса обслуживания.

Да, я могу написать коды для обратного вызова «then ()» для обработки найденных записей, но как быть с другими кодами внутри виджета, которые следуют и зависят от результата асинхронного вызова? Означает ли это, что мне нужно встроить все в предложение «then ()» и избежать добавления шагов выполнения после вызова метода, который возвращает Future? Любой предложенный образец для такой модели использования?

@override
Widget build(BuildContext context) {

   RealtimeDatabase.getData()  // my service class
      .then((onValue) {
        ..... // do something after the async call is completed
   }

   ..... // do something immediately before the async call is done


class RealtimeDatabase {

    Future<String> getData() async {

    DataSnapshot dataSnapshot = await FirebaseDatabase.instance.reference().orderByKey().once(); // will wait until completed
    .....
    .....

Извините, если мое описание здесь не хватает ясности, любые советы приветствуются.

Джимми

Ответы на вопрос(2)

Ваш ответ на вопрос