You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用GetStorage存储读取List<Map>并解决类型转换报错问题

报错根因

GetStorage读取数据时不会保留集合的嵌套泛型信息,你调用box.read<List<Map<String, dynamic>>>('payments')时,底层实际返回的是List<dynamic>类型,Dart不允许直接将List<dynamic>强制转换为List<Map<String, dynamic>>,因此触发类型转换异常。

修复方案

读取时先拿到动态类型的列表,再手动对列表内的元素做类型转换,修改你的getPaymentsFromDB方法即可:

void getPaymentsFromDB() {
  // 先读取为动态类型列表
  dynamic result = box.read('payments');
  
  if (result != null) {
    // 手动将每个元素转换为Map<String, dynamic>类型
    List<Map<String, dynamic>> typedResult = List<Map<String, dynamic>>.from(
      result.map((item) => Map<String, dynamic>.from(item))
    );
    payments = typedResult.map((payment) => Payment.fromJson(payment)).toList().obs;
  }
}

如果你希望省去类型转换的步骤,也可以在存储时将paymentsAsMap用jsonEncode转为字符串存储,读取时再用jsonDecode解析,两种方案都可以正常运行,你可以根据自己的业务习惯选择。

内容的提问来源于stack exchange,提问作者Suat Özkaya

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 10:36:02