如何使用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
相关产品推荐
相关产品推荐

