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']
       )
     );
   });