Flutter Future: функция сборки вернула ноль - PullRequest
1 голос
/ 09 марта 2019

Я хочу получить данные из базы данных для будущего строителя. Для этого я использую эту функцию.

Future getAllData() async {
  ReseviorDataModel resModel;
  DatabaseReference ref = FirebaseDatabase.instance.reference();
  DataSnapshot childed =await 
  ref.child("Reservoir/${widget.placeName}").once();
  Map<dynamic, dynamic> values;
  values = childed.value;
  resModel = ReseviorDataModel.customConstrcutor(values["sensor1"], 
  values["sensor2"], values["sensor3"]);
  return resModel;
}

Я вызываю эту функцию внутри моего будущего строителя.

  child: FutureBuilder(
         future: getAllData(),
         builder: (context, snapshot) {
         Center(child: Text(snapshot.data));
  }

но он продолжает выдавать "Функция сборки вернула ноль". ошибка. Я не могу понять, в чем здесь проблема

1 Ответ

2 голосов
/ 09 марта 2019

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

Проблема в этом случае заключалась в том, что OP ничего не возвращал от компоновщика, поэтому просто добавление возврата сработало.

Некоторые вещи, которые следует иметь в виду при использовании FutureBuilder.Всегда проверяйте свойство snapshot.hasData и возвращайте соответствующий интерфейс.Это предотвратит случаи, когда snapshot.data имеет значение NULL, приводя к возникновению новой ошибки в вашем виджете, принимающей значение NULL.

Пример:

child: FutureBuilder(
     future: getAllData(),
     builder: (context, snapshot) {
     if(!snapshot.hasData) {
         // show loading while waiting for real data
        return CircularProgressIndicator();
     }

     return Center(child: Text(snapshot.data));
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...