Flutter Future:构建函数返回null

时间:2019-03-09 07:19:44

标签: firebase firebase-realtime-database flutter

我想从Firebase检索数据到将来的构建器。为此我使用了此功能。

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 个答案:

答案 0 :(得分: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));
}