Flutter webapp:Snapshort返回一个空值

Posted

技术标签:

【中文标题】Flutter webapp:Snapshort返回一个空值【英文标题】:Flutter webapp: Snapshort returns a null value 【发布时间】:2021-04-14 06:34:09 【问题描述】:

我是 Flutter 的新手,一直在尝试从 firebase 检索数据并显示,但它的快照为空。我已经处理过其他用户提出的类似问题,但没有任何效果。

Widget build(BuildContext context) 
return Scaffold(
  appBar: AppBar(
    leading: BackButton(
      color: Colors.white,
    ),
    bottomOpacity: 1.0,
    backgroundColor: mucolor1,
    title: Text(
      "Customer receipt ",
      style: TextStyle(color: Colors.white, fontSize: 12),
    ),
  ),
  body: Stack(
    clipBehavior: Clip.none,
    alignment: Alignment.topCenter,
    children: [
      Container(
        child: StreamBuilder(
          stream: FirebaseFirestore.instance
              .collection("users")
              .doc(tableNo)
              .collection("order")
              .snapshots(),
          builder: (BuildContext context,
              AsyncSnapshot<QuerySnapshot> snapshot) 
            if (snapshot.connectionState == ConnectionState.waiting)
              return new Center(child: new CircularProgressIndicator());

            if(snapshot.data!=null)
              return Container(
                margin: EdgeInsets.fromLTRB(20, 100, 20, 0),
                child: ListView(
                  children: snapshot.data.docs.map((document) 
                    return Container(
                        color: Colors.white54,
                        child: Column(
                          crossAxisAlignment: CrossAxisAlignment.start,
                          children: [
                            Card(
                              elevation: 0,
                              child: Container(
                                padding: EdgeInsets.all(10),
                                child: Row(
                                  mainAxisAlignment:
                                  MainAxisAlignment.spaceAround,
                                  children: [
                                    Text("Tsh " +
                                        document.get("price").toString() +
                                        "/="),
                                    Text(document.get("qty").toString()),
                                    Text(document.get("title")),


                                  ],
                                ),
                              ),
                            )
                          ],
                        ));
                  ).toList(),
                ),
              );
            else 
              return Positioned(
                top: 80,
                child: Center(
                    child: Container(
                        margin: EdgeInsets.fromLTRB(20, 10, 20, 0),
                        child: Text("No data"))),
              );
            

          ,
        ),
      ),
      Positioned(
        top: 10,
        child: Center(
            child: Container(
                margin: EdgeInsets.fromLTRB(20, 10, 20, 0),
                child: Text("Your Order"))),
      ),
      Positioned(
          top: 50,
          child: Container(
              margin: EdgeInsets.fromLTRB(20, 10, 20, 0),
              child: Text(
                "Total Cost Tsh " + grandTotal + "/=",
                style:
                    TextStyle(color: mucolor2, fontWeight: FontWeight.bold),
              ))),
    ],
  ),
);

这是我的数据库结构:

我需要你的帮助。一个月来我一直在努力解决这个问题。

【问题讨论】:

您尝试过使用 collectionGroup('order') - firebase.google.com/docs/firestore/query-data/… 【参考方案1】:

您的users 文档为空;这意味着实际上并没有文档代替它。

在这种情况下,您应该使用collectionGroup('order') - https://firebase.google.com/docs/firestore/query-data/queries#collection-group-query

一个很好的参考:Firestore Cloud Function empty collection

【讨论】:

感谢您的好建议,但我仍然遇到同样的问题。我试图检查快照连接状态,它返回未连接if (snapshot.connectionState != ConnectionState.done) return Positioned( top: 80, child: Center( child: Container( margin: EdgeInsets.fromLTRB(20, 10, 20, 0), child: Text("Not connected")))); 这里是我的数据库规则......rules_version = '2'; service cloud.firestore match /databases/database/documents match /document=** allow write, read; 好消息是我可以从 Web 应用程序中写入数据库。所以我在堆积,想知道我错过了什么?请帮我解决这个问题 对于Streambuilder,请检查ConnectionState.active - data being non-null, and possible changing over time.snapshot.hasdata - returns whether this snapshot contains a non-null data value 是的...感谢连接状态有效。它连接但仍然“无数据”。【参考方案2】:

我将 firebase SDK js 版本 8.2.1 替换为 7.22.1 并且它可以工作。

更换前。

SDK 8.2.1


  <script src="https://www.gstatic.com/firebasejs/8.2.1/firebase-app.js"></script>

  <script src="https://www.gstatic.com/firebasejs/8.2.1/firebase-firestore.js"></script>
  <script src="https://www.gstatic.com/firebasejs/8.2.1/firebase-analytics.js"></script>

SDK 7.22.1

  <script src="https://www.gstatic.com/firebasejs/7.22.1/firebase-app.js"></script>

  <script src="https://www.gstatic.com/firebasejs/7.22.1/firebase-firestore.js"></script>
  <script src="https://www.gstatic.com/firebasejs/7.22.1/firebase-analytics.js"></script>

现在可以使用了。

【讨论】:

以上是关于Flutter webapp:Snapshort返回一个空值的主要内容,如果未能解决你的问题,请参考以下文章

我升级了 Flutter(和 Dart),现在我无法让 WebApps 工作

Flutter Web和Firebase身份验证TypeError:无法读取未定义的属性'app'

Flutter Redux 小吃店

Flutter/IOS混和开发情况下,项目内首个Flutter页面导航无返回问题

flutter项目中添加web支持

flutter web(3) 快速创建web工程并运行