【问题标题】:Flutter Future:A build function returned nullFlutter Future:构建函数返回 null
【发布时间】:2019-07-31 04:21:27
【问题描述】:

我想将数据从 firebase 检索到未来的 builder。我为此使用此功能。

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));
  }

但它一直抛出这个“构建函数返回 null”。错误。我无法弄清楚这里有什么问题

【问题讨论】:

  • 用return Center替换Center
  • 成功了。高度赞赏
  • 当然,欢迎您
  • @pskink 请写下来作为答案,否则其他人可能会出现并写下相同的内容。

标签: firebase firebase-realtime-database flutter


【解决方案1】:

要清除这里的内容,您的构建器始终必须返回一个要显示的小部件。如错误消息所述,您永远不能返回 null。

在这种情况下的问题是 OP 没有从构建器返回任何东西,所以只需添加一个返回就可以了。

使用 FutureBuilder 时要记住的一些事项。始终检查 snapshot.hasData 属性并相应地返回 UI。这将防止 snapshot.data 为 null 的情况,从而导致在您的 Widget 中抛出新的错误,并采用 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));
}

【讨论】:

    猜你喜欢
    • 2021-01-11
    • 2020-01-22
    • 2020-10-23
    • 2021-01-14
    • 2020-08-08
    • 2020-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多