颤振:阵列的Firebase贴图 编辑2:
我在下面编写的代码现在似乎可以工作了,但我无法使用它来填充ListTiles,因此它对于我需要实现的内容似乎没有用处 我被困在这一点上:颤振:阵列的Firebase贴图 编辑2:,firebase,flutter,Firebase,Flutter,我在下面编写的代码现在似乎可以工作了,但我无法使用它来填充ListTiles,因此它对于我需要实现的内容似乎没有用处 我被困在这一点上: Container( child: StreamBuilder( stream: Firestore.instance.collection('User').document('ObjectsList').snapshots(), builder: (BuildContext context, AsyncSnapshot<Docu
Container(
child: StreamBuilder(
stream: Firestore.instance.collection('User').document('ObjectsList').snapshots(),
builder: (BuildContext context, AsyncSnapshot<DocumentSnapshot> snapshot) {
if (!snapshot.hasData) {
return LoadingAnimation();
} else {
return ListView(
shrinkWrap: true,
children: _buildCarsList(snapshot),
);
}
},
),
),
原始问题: 我试图在Firebase中以类的形式创建一个数组存储库,用户可以创建,然后在以后编辑和删除 我认为实现这一点的唯一方法是使用唯一标识符作为每个数组(类)的名称,以便每个数组都可以唯一标识。问题在于,在Firebase中,如果数组标识符位于顶层,则根本无法与之通信,它基本上是不可见的 为了解决这个问题,我认为用户生成的数组需要放在一个映射下,这样在用户创建了一些条目之后,数据库就会像这样:
ObjectsList > CarsMap (Map)
(document) - sh899873jsa (Array)
0 "Toyota"
1 "Supra"
2 "1996"
3 "$4990"
- hasd823j399 (Array)
0 "Toyota"
1 "Corolla"
2 "2014"
3 "$11990"
- nelaoiwi283 (Array)
0 "Ford"
1 "Territory"
2 "2018"
3 "$35000"
但我不知道如何在颤振中实际使用这种结构,因为我以前从未见过这种结构,在网上也找不到任何东西。我需要能够做的是从这些数据构建ListTiles,并能够选择用于编辑/删除ontap的特定数组
我一直在尝试以下代码:
final DocumentReference documents = await Firestore.instance.collection('ObjectsList');
DocumentSnapshot snapshot = await documents.get();
Map<String, dynamic> data = snapshot.data;
var loadCarItems = [];
data.forEach((k,v) => {
values = List<String>.from(v as List<String>),
print(values),
if (values[0] == "Toyota") {
loadCarItems.add(values[0]),
},
});
setState(() {
CarItemsArray = loadCarItems;
});
final DocumentReference documents=wait Firestore.instance.collection('ObjectsList');
DocumentSnapshot snapshot=等待文档。获取();
Map data=snapshot.data;
var loadCarItems=[];
data.forEach((k,v)=>{
值=列表。从(v为列表),
打印(值),
如果(值[0]=“丰田”){
loadCarItems.add(值[0]),
},
});
设置状态(){
CarItemsArray=负载Caritems;
});
但我在这一行中遇到了一个错误:
data.forEach((k,v) => {
values = List<String>.from(v as List<String>),
data.forEach((k,v)=>{
值=列表。从(v为列表),
错误是:
Unhandled Exception: type '_InternalLinkedHashMap<String, dynamic>' is not a subtype of type 'List<String>' in type cast
未处理的异常:类型“\u InternalLinkedHashMap”不是类型转换中“List”类型的子类型
有人知道这样的数组映射的语法吗?我想我们没有在“CarsMap”中开始迭代,而是在整个映射中进行了迭代
data['CarsMap'].forEach((k,v) => {
values = v, // Since it is dynamic, it takes care of casting.
print(values),
if (values[0] == "Toyota") {
loadCarItems.add(values[0]),
},
});
或
希望这能解决您的问题。在
地图数据=快照。数据;
之后,您能分享数据的价值吗?
?非常感谢您的回复。我已经在上面的原始帖子中回答了您的问题。非常感谢您的回答。我感觉我离最终完成这项工作已经很近了。现在有另一个错误:未处理的异常:类型“List”不是类型cast中类型“List”的子类型。我们可以尝试一下values=v
本身吗?因为它是动态的,它负责铸造?更新了答案这不再是错误,这太棒了。我现在得到的是,当我打印loadCarItems时,我只得到值[Toyota,Toyota]。它不会填充其余的数据。哦,这只是因为[0]哈哈。正确的行是:loadCarItems.add(值),这不再是错误,这很好,但它并没有像我想的那样解决我的问题。我已经更新了上面的问题,我确信,因为这段代码解决了我现在很接近,但只是不知道构建语法。
Unhandled Exception: type '_InternalLinkedHashMap<String, dynamic>' is not a subtype of type 'List<String>' in type cast
data['CarsMap'].forEach((k,v) => {
values = v, // Since it is dynamic, it takes care of casting.
print(values),
if (values[0] == "Toyota") {
loadCarItems.add(values[0]),
},
});
data['CarsMap'].forEach((k,v) => {
values = v.cast<String>(), // Casting it to String
print(values),
if (values[0] == "Toyota") {
loadCarItems.add(values[0]),
},
});
_buildCarsList(snapshot) {
List<Widget> listItems = [];
Map<String, dynamic> data = snapshot.data.data();
data['CarsMap'].forEach((k, v) {
List<String> values = v.cast<String>();
if (values[0] == "Toyota") {
listItems.add(
Container(
child: Text(
values[1],
),
),
);
}
});
return listItems;
}