当我检查我需要从服务器获取的数据时,我得到了一个带有null的map错误



我在尝试映射需要从服务器获得的列表时遇到了这个错误


**您可以找到导致noSuchMethodError**的代码

Future<void> fetchAndSetOrders() async {
const url = 'https://flutter-shop-app-d675a.firebaseio.com/orders.json';
final response = await http.get(url);
final List<OrderItem> loadedOrders = [];
final extractedData = json.decode(response.body) as Map<String, dynamic>;
if (extractedData == null) {
return;
}
extractedData.forEach((orderId, orderData) {
loadedOrders.add(
OrderItem(
id: orderId,
totalAmount: orderData['totalamount'],
dateTime: DateTime.parse(orderData['dateTime']),
products: (orderData['products'] as List<dynamic>)
.map(
(item) => CartItem(
id: item['id'],
price: item['price'],
quantity: item['quantity'],
title: item['title'],
),
)
.toList(),
),
);
});
_orders = loadedOrders.reversed.toList();
notifyListeners();
}

有些订单没有产品,例如:

"-M5vdHyPFMBDzyx-5_FW":{
"dateTime":"2020-04-27T14:38:15.033916",
"totalamount":0.0
},

因此,表达式(orderData['products'] as List<dynamic>)的计算结果为null,对其调用map函数会中断程序。

要修复它,你可以使用Elvis操作符,比如:

products: (orderData['products'] as List<dynamic>)
?.map((item) => CartItem(...))
?.toList() ?? [],

最新更新