Dart中如何将CartItemModel对象列表转换为Map格式列表?
赋值无效的原因
直接写List items = cartItems;无法达成目标,本质是该操作只是复制了原列表的内存引用,列表元素依然是CartItemModel类的自定义实例,完全不是你需要的键值对Map结构。
正确的转换方案
转换的核心逻辑是逐一遍历原购物车列表的每个元素,将每个自定义实例拆解为对应字段的Map结构,最终汇总为目标格式的列表:
- 快速实现的写法:
List<Map<String, dynamic>> items = cartItems.map((cartItem) { return { "name": cartItem.name, "quantity": cartItem.quantity, "price": cartItem.price, "currency": cartItem.currency, }; }).toList();
- 可维护性优化:考虑到自定义模型大概率会在多处做序列化操作,可以直接在
CartItemModel类内部新增toMap()转换方法,避免重复写拆解逻辑:
class CartItemModel { String name, price, currency; int quantity; CartItemModel({ this.name, this.price, this.quantity, this.currency = "GBP", }); // 内置Map转换方法 Map<String, dynamic> toMap() { return { "name": name, "quantity": quantity, "price": price, "currency": currency, }; } }
优化后,列表转换的代码会非常简洁:
List<Map<String, dynamic>> items = cartItems.map((item) => item.toMap()).toList();
内容的提问来源于stack exchange,提问作者Sohel Mahmud
相关产品推荐
相关产品推荐

