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'