如何使用 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;
我正在尝试使用 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;