如何使用 Get Storage 保存和检索列表<Map>

How to save and retrieve a List<Map> with Get Storage

我正在尝试使用 GetStorage 坚持一个简单的 List<Map<String,dynamic>>

文档说:

When to use GetStorage:

  • simple Maps storage.
  • cache of http requests
  • storage of simple user information.
  • simple and persistent state
  • storage any situation you currently use sharedPreferences.

所以,我没有encoded/decoded到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;
    }
  }

您需要将 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;