簡體   English   中英

將檢索到的 json 轉換為 flutter 中的自定義對象列表

[英]convert retrieved json to a list of custom objects in flutter

我正在嘗試從共享首選項保存和檢索自定義對象列表。

這是我的存檔 function

  save(String key, value) async {
final prefs = await SharedPreferences.getInstance();
prefs.setString(key, json.encode(value));
print(json.encode(value));
  }

我正在保存產品列表:

import 'category.dart';
import 'image.dart';
import 'rating.dart';

class Product{
  int id;
  String name_en,
      name_ar,
      description_en,
      description_ar,
      original_price,
      stock,
      final_price;
  bool has_sale;
  Category category;
  Rating rating;
  Image main_image;

  Product(
      {this.main_image,
        this.name_en,
        this.name_ar,
        this.category,
        this.description_ar,
        this.description_en,
        this.final_price,
        this.has_sale,
        this.rating,
        this.original_price,
        this.stock});

  factory Product.fromJson(Map<String, dynamic> json) {
    return Product(
        main_image: json['main_image'] != null
            ? Image.fromJson(json['main_image'])
            : null,
        name_en: json['name_en'],
        name_ar: json['name_ar'],
        description_en: json['description_en'],
        description_ar: json['description_ar'],
        original_price: json['original_price'],
        final_price: json['final_price'],
        category: Category.fromJson(json['category']),
        rating: Rating.fromJson(json['rating']),
        has_sale: json['has_sale']
    );
  }

  Map<String, dynamic> toJson() => {
'main_image': main_image,
'name_en': name_en,
'name_ar': name_ar,
'description_en': description_en,
'description_ar': description_ar,
'original_price': original_price,
'final_price': final_price,
'category': category,
'rating': rating,
'has_sale': has_sale




 };

}

它工作正常..這是我檢索數據 function

 read(String key) async {
final prefs = await SharedPreferences.getInstance();
return json.decode(prefs.getString(key));


}

我的問題發生在嘗試將 json 轉換為產品列表時,這就是我所做的

  var productsFromShared = await sharedPref.read("product");
  var listNewProducts = productsFromShared as List;
  List<Product> list =
  listNewProducts.map((i) => Product.fromJson(i)).toList();

我錯過了什么?

要獲取數據 function 中的詳細信息,請添加以下代碼:

class Product{

Future<void> loadPastDetails() async {

    SharedPreferences prefs = await SharedPreferences.getInstance();
    String storeKey = prefs.getString("Key");

    if (storeUser != null) { // Load store key
      Map<String, dynamic> jsonValue = json.decode(storeKey);
      print('Details $storeKey');
      // Do update operations
    }
  }    
}

更新從 JSON 轉換為值。

Future<void>  updateDetails(Map<String, dynamic> jsonValue) async {

    name_en = jsonValue['name_en'] ?? this. name_en;
    name_ar = jsonValue['name_ar'] ?? this. name_ar;
    // and so on..

    print(name_en);
}

希望這可以幫助!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM