【问题标题】:Flutter Firebase - Snapshot cannot get data,Flutter Firebase - 快照无法获取数据,
【发布时间】:2023-04-10 10:10:02
【问题描述】:

如果我尝试获取数据,例如 snapshot.data.lenght,它不起作用(如果我按 Tab,它甚至不会显示)并且我收到以下错误:

在构建 FutureBuilder>(dirty, state: _FutureBuilderState>#7a7e2) 时引发了以下 NoSuchMethodError: 类“列表”没有实例获取器“文档”。 接收方:“_GrowableList”的实例(长度:2) 尝试调用:文档

我的代码:

  Future<List> _getPlants() async {
var firestore = Firestore.instance;
QuerySnapshot qn = await firestore.collection("easy_plants").getDocuments();
List<PlantsMainItem> plantsmainnew = [];
for (int i = 0; i < qn.documents.length; i++) {
  var a = qn.documents[i];
  PlantsMainItem plantsitem = PlantsMainItem(
      a.data["title"],
      a.data["titlelatin"],
      a.data["content"],
      NetworkImage(a.data["image"]),
      a.data["sunlevel"],
      a.data["level"]);

  print(plantsitem.titlelatin);
  plantsmainnew.add(plantsitem);

}
//print(plantsmainnew.length);
return plantsmainnew;

}

小部件构建(BuildContext 上下文){

return Container(
  child: FutureBuilder(
        future: _getPlants(),
        builder: (context, snapshot) {
          if(snapshot.data == ConnectionState.waiting) {
            return Container(
              height: 200,
              width: 400,
              child: Padding(
                padding: EdgeInsets.all(20),
                child: Center(
                  child: Container(
                    child: LinearProgressIndicator(),
                  ),
                ),
              ),
            );
          } else {
            print(snapshot.data);
            return Text("TEST", style: TextStyle(fontSize: 30));

          }

        }
  ),
);

}

【问题讨论】:

    标签: android flutter dart


    【解决方案1】:

    错误表明您的“列表”类没有文档获取器,您可以尝试使用相同的代码从您的函数中删除“列表”吗?

    Future _getPlants() async {
      var firestore = Firestore.instance;
      QuerySnapshot qn = await firestore.collection("easy_plants").getDocuments();
      List<PlantsMainItem> plantsmainnew = [];
      for (int i = 0; i < qn.documents.length; i++) {
        var a = qn.documents[i];
        PlantsMainItem plantsitem = PlantsMainItem(
          a.data["title"],
          a.data["titlelatin"],
          a.data["content"],
          NetworkImage(a.data["image"]),
          a.data["sunlevel"],
          a.data["level"]);
    
      print(plantsitem.titlelatin);
      plantsmainnew.add(plantsitem);
    
    }
    

    如果您对 FutureBuilder 使用以下结构,我认为这也只是一个建议:

              if (snapshot.connectionState != ConnectionState.done)
                return YOUR WAITING ACTION;
                if (snapshot.connectionState == ConnectionState.done && snapshot.hasData) 
                  if (snapshot.hasError) {YOUR ERROR SCREEN}
                return YOUR ACTUAL SCREEN
    

    【讨论】:

      猜你喜欢
      • 2019-03-03
      • 2021-09-05
      • 2017-07-27
      • 2020-04-20
      • 1970-01-01
      • 1970-01-01
      • 2022-09-23
      • 2016-12-28
      • 2020-09-10
      相关资源
      最近更新 更多