如何使用 Get Storage 保存和检索 List<Map>
Posted
技术标签:
【中文标题】如何使用 Get Storage 保存和检索 List<Map>【英文标题】:How to save and retrieve a List<Map> with Get Storage 【发布时间】:2021-10-14 18:37:26 【问题描述】:我正在尝试使用 GetStorage 保留一个简单的 List<Map<String,dynamic>>
。
文档说:
何时使用 GetStorage:
简单的地图存储。 http 请求缓存 简单用户信息的存储。 简单而持久的状态 存储您当前使用 sharedPreferences 的任何情况。
所以,我没有编码/解码为 json 字符串。
最后报错
type 'List<dynamic>' is not a subtype of type 'List<Map<String, dynamic>>?' in type cast
这是我的代码,box.read()
方法抛出错误:
final box = GetStorage();
var payments = <Payment>[].obs;
Future<void> savePaymentsToDB() async
var paymentsAsMap = payments.map((payment) => payment.toJson()).toList();
await box.write('payments', paymentsAsMap);
void getPaymentsFromDB()
var result = box.read<List<Map<String, dynamic>>>('payments');
if (result != null)
payments =
result.map((payment) => Payment.fromJson(payment)).toList().obs;
【问题讨论】:
【参考方案1】:您需要将paymentsAsMap
编码为json 字符串。您模型上的 toJson
方法仅将该模型转换为 json 对象(键、值对)。要将其存储在共享首选项或getStorage
中,您应该将该 json 对象转换为字符串。
import 'dart:covert';
// Storing data
...
var paymentsAsMap = payments.map((payment) => payment.toJson()).toList();
String jsonString = jsonEncode(paymentsAsMap);
await box.write('payments', jsonString);
// fetching data
var result = box.read('payments');
dynamic jsonData = jsonDecode(result);
payments = jsonData.map((payment) => Payment.fromJson(payment)).toList().obs;
【讨论】:
我尝试了您的解决方案。现在我得到错误:类'List以上是关于如何使用 Get Storage 保存和检索 List<Map>的主要内容,如果未能解决你的问题,请参考以下文章
如何上传图片Url上传到Fire Storage并同时保存在fireStore中使用Java
Chrome.storage.sync.set/get 不工作
如何使用 Zend_Mail_Protocol_Imap 或 Zend_Mail_Storage_Imap 批量检索电子邮件
从 Fire Storage 检索图像,但是如果图像不存在,则应用程序崩溃