#json #flutter #provider
#json #flutter #поставщик
Вопрос:
Здравствуйте, я новичок в flutter, и есть этот объект, который содержит все сведения о продуктах, поэтому, когда товар добавляется в корзину, я хочу, чтобы он сохранял все детали в формате json, чтобы я мог получить его позже.
вот класс items
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 для управления состоянием
Ответ №1:
Вы можете использовать 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));
Комментарии:
1. привет, я просто реализую ваше предложение, и результат выглядит так. ` [ { «Идентификатор»: «2», «цвета»: [ { «тип»: «черный», «размер»: { «тип»: 46, «количество»: 2 } } ] }, { » Идентификатор»: «2», «цвета»: [{ «тип»: «красный», «размер»: { «тип»: 46, «количество»: 2 } } ] }, ]`
2. но я не хочу, чтобы ключи были в двойных кавычках, таких как «id»
3. Привет @HaptomeHadush. Почему это? Вы просили сохранить ваши данные в формате JSON. А в формате JSON ключи должны быть заключены в кавычки. Ссылка: json.org/json-en.html
4. Привет @Matthias итак, вот в чем дело, данные представляются следующим образом (я использовал GraphQL), вот почему. postOrder( продукты: [ {_id: «2», ProductName: «Обновленное имя», цвета: { тип: «серый», размеры: { тип: «m»,количество: 10}}}, {_id: «2», ProductName: «Обновленное имя», цвета: { тип: «серый», размеры: {тип: «m», количество: 12}}}], ) }
5. @HaptomeHadush — это уже не JSON, а что-то вроде JSON. Вероятно, вам следует исправить получателя данных.