在 flutter 中将对象列表到 json

List object to json in flutter

你好,我是 flutter 的新手,这个对象包含所有产品的详细信息,所以当将产品添加到购物车时,我希望它以 json 格式存储所有详细信息,我可以稍后检索它。

这是项目class

class Item {
String productName;
String productImage;
int productQuatity;
int productId;
double productPrice;
String productColor;
String productSize;

Item(this.productName, this.productImage, this.productQuatity, this.productId, this.productPrice, this.productColor, this.productSize);

  Map toJson() => {
    'id': productId.toString(),
    'productName': productName.toString(),
    'colors': {
      'type': productColor.toString(),
      'sizes': {'type': productSize.toString(), 'amount': productQuatity}
    },
  };
  }

这也是加项通知

class AddItemNotifiy extends ChangeNotifier {
 List<Item> listItem = [];
 List<FinalProducts> finalProducts = [];
  addItem(String productName, String productImage, int productQuatity, int productId, double productPrice, String productColor, String productSize) async {
  Item item = Item(productName, productImage, productQuatity, productId, productPrice, productColor, productSize);
   listItem.add(item);

   notifyListeners();
    }

   void removeItem(Item _item) async {
   listItem.remove(_item);
   notifyListeners();
   }

 void toJsonForm(Item item) async {
 SharedPreferences sharedPreferences = await SharedPreferences.getInstance();
  String currency;
  List<String> myList = List<String>(listItem.length);
   for (var i = 0; i <= listItem.length - 1; i++) {
    myList[i] = listItem[i].toJson().toString();
   }
    sharedPreferences.setString('productList',myList.toString() );
    currency = sharedPreferences.getString("productList");

    print(jsonDecode (myList));

 }
}

输出就是这样

     [{_id: 2, productName: Updated name, colors: {type: grey, sizes: {type: m, amount: 10}}},{_id: 2, productName: Updated name, colors: {type: grey, sizes: {type: m, amount: 10}}}]

但我希望它是这样的

 [
{
    Id: "2",
    colors: [
        {
            type: "black",
            size: {
                type: 46,
                amount: 2
            }
        }
    ]
},
{
    Id: "2",
    colors: [
        {
            type: "red",
            size: {
                type: 46,
                amount: 2
            }
        }
    ]
},  
]

我也使用 provider 进行状态管理

您可以使用 jsonEncode 将对象转换为 JSON 字符串。

这应该有效:

var myList = listItem.map((el) => el.toJson()).toList();

// Save the list as a string
sharedPreferences.setString('productList', myList.toString());

// Convert the list to a JSON string
print(jsonEncode(myList));