我正在嘗試List<Map<String,dynamic>>使用 GetStorage來保持簡單。
檔案說:
何時使用 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;
}
}
uj5u.com熱心網友回復:
您需要編碼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;
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/315568.html
上一篇:FlutterRiverpod:如何在slivers中使用消費者小部件
下一篇:如何讓父母只能點擊?
