Flutter中如何从Firestore导入Map及Map列表数据?
从Firestore读取Map类型地址和Map列表类型商品数据的Flutter示例
以下是适配你需求的完整代码示例,包含读取地址(Map类型)和商品列表(Map列表类型)的实现:
Future<void> getOrderDetails(String id) async { final orderSnapshot = await FirebaseFirestore.instance .collection('orders') .where('Order id', isEqualTo: id) .get(); if (orderSnapshot.docs.isEmpty) { return; } final orderData = orderSnapshot.docs.first.data(); // 原有基础数据读取逻辑 status = orderData['Status']; print(status); this.id = id; print(this.id); Timestamp t = orderData['Date & Time']; startDate = t.toDate(); print(startDate); // 读取Map类型的地址数据 Map<String, dynamic> address = orderData['Address']; print('收件人:${address['Name']}'); print('联系电话:${address['Phone']}'); print('详细地址:${address['Address']}'); print('所在城市:${address['City']}'); // 读取Map列表类型的商品数据 List<Map<String, dynamic>> products = List.from(orderData['Products']); products.forEach((product) { print('商品名称:${product['Product name']}'); print('购买数量:${product['Quantity']}'); print('商品单价:${product['Price']}'); }); }
关键细节说明
- 读取嵌套Map(地址):Firestore中的
Address是嵌套Map结构,直接用Map<String, dynamic>类型接收后,通过键名即可获取对应字段值。 - 读取Map列表(商品):
Products是包含多个Map的数组,使用List.from()将Firestore返回的动态列表转换为List<Map<String, dynamic>>,之后通过遍历即可逐个处理商品数据。
空安全优化(可选)
如果担心字段可能不存在导致报错,可以添加空值判断:
// 安全读取地址 Map<String, dynamic>? address = orderData['Address'] as Map<String, dynamic>?; if (address != null) { // 处理地址逻辑 } // 安全读取商品列表 List<dynamic>? productListRaw = orderData['Products'] as List<dynamic>?; if (productListRaw != null) { List<Map<String, dynamic>> products = productListRaw.cast<Map<String, dynamic>>(); // 处理商品逻辑 }
内容的提问来源于stack exchange,提问作者Oxelo99
相关产品推荐
相关产品推荐

