Android 从firebase实时数据库响应颤振时出现的问题
我想从实时数据库中获取数据,数据以 映射Android 从firebase实时数据库响应颤振时出现的问题,android,firebase,flutter,firebase-realtime-database,dart,Android,Firebase,Flutter,Firebase Realtime Database,Dart,我想从实时数据库中获取数据,数据以 映射 问题就在这里 const url='https://XYZfirebaseio.com/products.json'; try{ final resp= await http.get(url); print(json.decode(resp.body)); final extractedData=json.decode(resp.body) as Map<String,dynamic>; final List
const url='https://XYZfirebaseio.com/products.json';
try{
final resp= await http.get(url);
print(json.decode(resp.body));
final extractedData=json.decode(resp.body) as Map<String,dynamic>;
final List<Product>loadedProducts=[];
extractedData.forEach((id,data){
loadedProducts.add(
Product(
id: data,
title: data['title'],
description: data['descripiton'],
price:data['price'],
imageUrl: data['imageUrl'],
isFavorite: data['imageUrl']
)
);
});
问题确实存在于forEach循环中,forEach接受一个带有两个参数的函数,一个带有key(您称之为“id”),另一个带有value(您称之为“data”),问题是产品类上的id参数,因为它是一个字符串,但您将其作为映射值 如果您检查您得到的json结果
I/flatter(4307):{-LvsecaYtE8jB81j6USh:{description:dummytile,imageUrl:https.dummyd.jpg,isfavorite:false,title:dummytile}
,那么forEach循环将只迭代一次,密钥将是-LvsecaYtE8jB81j6USh
(您的“id”),值将是{description:DummyTitle,imageUrl:https.dummyd.jpg,isfavorite:false,title:DummyTitle}
(您的“数据”),因此您可以看到,您分配的数据是错误的
正确的方法是:
extractedData.forEach((id,data) {
loadedProducts.add(
Product(
id: id,
title: data['title'],
description: data['descripiton'],
price:data['price'],
imageUrl: data['imageUrl'],
isFavorite: data['imageUrl']
)
);
});
这是,假设值“-LvsecaYtE8jB81j6USh”是您想要的真实id。您想要检索的数据以
Map
的形式存在的可能性是什么?Firebase数据库总是以Map
的形式返回数据,您能分享您的产品类别吗?是的,您完全正确。但我指的是我得到的确切数据。我只是简单地描述了更多。将您的产品类别添加到您的问题中,以便我将能够检查代码第5行中看到的所有内容……这一行导致了上述错误。在这种情况下,Flatter抱怨当您需要一个Map
extractedData.forEach((id,data) {
loadedProducts.add(
Product(
id: id,
title: data['title'],
description: data['descripiton'],
price:data['price'],
imageUrl: data['imageUrl'],
isFavorite: data['imageUrl']
)
);
});