当前位置: 首页 > 知识库问答 >
问题:

从firebase实时数据库响应颤振时出现的问题

戚奇略
2023-03-14

我想从实时数据库中获取数据,数据以地图的形式存在

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

虽然Product类只是一个普通类,其PRICE属性为Double,但其他所有属性都是String。执行此代码时,会产生以下错误。

I/flatter(4228):类型“\u InternalLinkedHashMap”不是类型“String”的子类型

我可以使用什么样的数据结构/方法/解决方法?

产品类别

import 'package:flutter/foundation.dart';
class Product with ChangeNotifier{
  final String id;
  final String title;
  final String description;
  final double price;
  final String imageUrl;
  bool isFavorite;

  Product(
    {
      @required this.id,
      @required this.title,
      @required this.description,
      @required this.price,
       this.isFavorite = false,
     @required this.imageUrl
    }
  );

共有1个答案

符修杰
2023-03-14

这个问题确实存在于你的每一个循环中,每一个函数都有两个参数,一个带key(你称之为id),另一个带value(你称之为data),问题是你的id参数超过了Products类是一个String,但您正在向它提供Map值。

如果你检查你的json结果,你得到了I/flutter(4307):{-LvsecaYtE8jB81j6USh:{description: DummyTitle, ImageUrl:https.dummmyd.jpg, isFavourite: false, title: DummyTitle}},所以foreach循环只会迭代一次,键将是-LvsecaYtE8jB81j6USh(你的"id"),值将是{description: DummyTitle, ImageUrl:https.dummmyd.jpg, isFavourite: false, title: DummyTitle}(你的"data"),所以你可以看到,你分配错了...

正确的做法是:

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。

 类似资料:
  • 我有以下Firebase实时数据库连接到我的Flatter项目: 我对flutter和fire base相当陌生,我知道在我的flutter项目中访问此数据库中数据的一种方法是使用数据库引用变量。所以我有以下参考变量: 现在,如何使用此itemRef访问数据库中的温度和脉冲值?

  • 我已经开始学习flutter。并试图将Firebase实时数据库集成到我的flutter项目中。但是当我将依赖项添加到我的android部分的build.graddle文件时,我开始得到这个错误。 当我添加 到应用程序级构建的底部。梯度 还有这个 到我的项目级gradle文件。 我还在pubspec中添加了firebase\u数据库依赖项。依赖项下颤振的yaml文件

  • 我目前正在Android中使用静态编程语言进行培训,每当我试图访问Firebase数据库中当前的数据时都会遇到问题。下面是数据库中的数据: 数据库映像 之后,在将应用程序链接到Firebase之后,我刚刚创建了一个包含所有必需导入的主活动,但不幸的是,每当我执行应用程序并按下按钮时,什么都没有发生。 日志没有出现任何时间,它真的很烦人,因为我在留档中搜索,据我所知,这是我应该做的一切(我还检查了数

  • 收到评论后,我已将以下代码部署到我的Firebase项目中,并已成功部署!。但没有向我发送任何通知。请在此处查看我的Firebase实时数据库截图以更好地理解。 [现已解决:它将只向一个ID(即我的管理设备)发送通知] 工作代码: 有关更多详细信息,请参阅此视频链接 注意:如果您的应用程序已打开并最小化,则会显示通知,但如果应用程序已打开且您正在使用,或者如果应用程序已终止,则强制关闭,则不会工作

  • 在我的flatter应用程序中,我正在使用firebase\u auth for google\u sign\u In,它运行良好。但是当我把cloud\u firestore添加到pubspec时。yaml然后获取依赖项,然后重新启动我的应用程序。它会显示以下错误:

  • 我一直在创建一个应用程序,在过去的两天里一直在解决这个问题,没有任何进展。从internet获取数据时,请使用http。get请求给了我一个异常。这就是我试图集成到我的应用程序中的Rapid API(IMDB)。我将为您提供我的代码,以便更好地理解。 下面是get请求: 以下是我调用API的方式: 这是我从中得到的一个例外: 这就是我期望从服务器得到的JSON: