我正在从Firebase获取订单数据,工作正常,但如果没有数据,它会在控制台中显示错误

我添加了一个if语句,如果数据不可用,即使它不能解决问题

这是我的代码,用于获取订单数据,并在Firebase数据中没有产品的情况下处理产品列表

那么,如果没有产品,现在该如何解决呢

Future<void> fetchandsetorders() async {
    final url = Uri.parse(
        myelin);
    final response = await http.get(url);
    final List<OrderItem> loadedorders = [];
    final extradeddata = json.decode(response.body) as Map<String, dynamic>;
    
//I added this statement but still not solving
if(extradeddata==null)
      return;
    extradeddata.forEach((orderid, orderdata) {
      loadedorders.add(
        OrderItem(
          id: orderid,
          products: (orderdata['products'] as List<dynamic>).map((item) {
            return CartItem(
                id: item['id'],
                title: item['title'],
                quantity: item['qty'],
                price: item['price']);
          }).toList(),
          amount: orderdata['amount'],
          date: DateTime.parse(orderdata['date']),
        ),

      );
    });

    _orders=loadedorders;
    notifyListeners();
  }

显示错误是



E/flutter (32144): [ERROR:flutter/lib/ui/ui_dart_state.cc(209)] Unhandled Exception: type 'Null' is not a subtype of type 'Map<String, dynamic>' in type cast
E/flutter (32144): #0      Orders.fetchandsetorders (package:finalshopapp/orders.dart:31:53)
E/flutter (32144): <asynchronous suspension>

推荐答案

您面临的错误是由下面这行代码引起的:

final extradeddata = json.decode(response.body) as Map<String, dynamic>;

response.body为空时,不能将其强制转换为Map<String, dynamic>

因此,一种解决方案可能是判断response.body是否为空,然后将其强制转换为Map.示例代码:

Future<void> fetchandsetorders() async {
    final url = Uri.parse(
        myelin);
    final response = await http.get(url);
    final List<OrderItem> loadedorders = [];
    // Add this line here
    if (response.body == null) return;
    final extradeddata = json.decode(response.body) as Map<String, dynamic>;
    
// NO NEED FOR THIS
//if(extradeddata==null)
      //return;
    extradeddata.forEach((orderid, orderdata) {
      loadedorders.add(
        OrderItem(
          id: orderid,
          products: (orderdata['products'] as List<dynamic>).map((item) {
            return CartItem(
                id: item['id'],
                title: item['title'],
                quantity: item['qty'],
                price: item['price']);
          }).toList(),
          amount: orderdata['amount'],
          date: DateTime.parse(orderdata['date']),
        ),

      );
    });

    _orders=loadedorders;
    notifyListeners();
  }

Flutter相关问答推荐

如何在列表磁贴上添加行

Flutter 导致底部溢出

Box约束强制无限高:SizedBox. Expand()

如何为Android 12及以上设备以及Android 11及以下设备动态处理Splash Screen?如果可能的话没有包裹

Flutter 蜂窝单元测试

在框中保存对象列表时,类型推断无法正常工作

try 使用fl_Chart of Ffltter,但在导入它时遇到以下错误:Error:';TextScaler';is;t a type

如何在Ffltter 3.16中设置标准的提升按钮主题?

应为Map String,dynamic类型的值,但得到的值为type()= Map String,dynamic'

如何画三角形的圆角?

打开键盘时屏幕组件会被压扁

在 Flutter 中使用条件语句设置 ImageProvider Object 类型的背景图像

如何获取flutter中gridview项目占用的高度和宽度?

无法从一个页面导航到下一个页面 (Flutter)

如何在 Flutter (iOS) 中解决这个问题

从子集合sem中获取参考学年&&课程名称的值

flutter 中 // 和 /// 有什么区别

如何获得Flutter 的时差?

如何在Flutter 中制作自定义微调器?

小部件库捕获的 Flutter 异常