我有一个应用程序,我需要将这些数据从firestore数据库中逐一地移到Listview中。我尝试了很多类似流生成器和将来的生成器的方法,但是由于我的数据库可以处理嵌套数据,因此无法获取,如果您有任何建议,请非常感谢。有什么解决方案可以读取所有这些嵌套数据?有时商品名称可能会有所不同,所以如果嵌套数据具有id或数量值
我可以读取我已经用过了,但是不起作用:
import 'package:flutter/material.dart';
import 'package:cloud_firestore/cloud_firestore.dart';
class cart_page extends StatelessWidget {
@override
Widget build(BuildContext context) {
return new StreamBuilder<QuerySnapshot>(
stream: Firestore.instance.collection("cart").where("quantity",
isGreaterThanOrEqualTo: 1).snapshots(),
builder: (BuildContext context, AsyncSnapshot<QuerySnapshot>
snapshot) {
if (!snapshot.hasData) return new Text("There is no expense");
return new ListView(children: getExpenseItems(snapshot));
});
}
getExpenseItems(AsyncSnapshot<QuerySnapshot> snapshot) {
return snapshot.data.documents
.map((doc) => new ListTile(
title: new Text(doc["itemName"]),
subtitle: new Text(doc["quantity"]))
)
.toList();
}
}
答案 0 :(得分:1)
问题是您正在访问的特定实例是map,因此您可能需要这样做:
title: new Text(doc["Item 9"]["itemName"]),
subtitle: new Text(doc["Item 9"]["quantity"]))
答案 1 :(得分:1)
除了我上面的答案以外,我还更改了代码,您还查询了嵌套数据库错误,并且由于我需要索引才能完成这项工作,因此我不得不四处移动。您可能需要尝试使用它才能使它起作用,但是总的思路就在那里。
class Example extends StatelessWidget {
var listOfWidgets = [];
@override
Widget build(BuildContext context) {
return ListView.builder(
itemCount: //number of items ,
itemBuilder: (BuildContext context, int index) => StreamBuilder(
stream: Firestore.instance
.collection("cart")
.where("Item$index.quantity", isGreaterThanOrEqualTo: 1)
.snapshots(),
builder:
(BuildContext context, AsyncSnapshot<QuerySnapshot> snapshot) {
if (!snapshot.hasData) return new Text("There is no expense");
return ...listOfWidgets;
}),
);
}
getExpenseItems(AsyncSnapshot<QuerySnapshot> snapshot) {
var item = snapshot.data.documents
.map((doc) => new ListTile(
title: new Text(doc["Item$index.Name"]),
subtitle: new Text(doc["Item$index.quantity"])))
.toList();
listOfWidgets.add(item);
}
}
答案 2 :(得分:0)
Firestore不支持您需要的查询类型,即您需要读取整个“父亲”集合,因此您可以阅读文档和子集合。 Firestore上的Queris很浅,因此它们不允许这么多的功能。正如社区其他人所告知和评论的那样,更改数据库更好,因此它遵循一种模式,而不是每次都有可能使用不同名称的项目。