这是我存储CartItems的代码。
我想把它作为CartItems存储在Shared Preferences中,因为在刷新时,数据正在丢失.另外,我想在CartItem中拥有检查产品是否在购物车中的功能,这样我就可以让它checkunchecked。
class CartItem {
final String id;
final String prodID;
final String title;
final String img;
final double quantity;
final double price;
final double availQuantity;
CartItem({
@required this.id,
@required this.prodID,
@required this.title,
@required this.quantity,
@required this.price,
@required this.img,
this.availQuantity,
});
}
class Cart with ChangeNotifier {
Map<String, CartItem> _items = {};
Map<String, CartItem> get items {
return {..._items};
}
int get itemCount {
return _items.length;
}
void addItem(String productId, double price, String title, String img,
double availQuantity) {
if (_items.containsKey(productId)) {
_items.update(
productId,
(existingCartItem) => CartItem(
id: existingCartItem.id,
title: existingCartItem.title,
img: existingCartItem.img,
price: existingCartItem.price,
quantity: existingCartItem.quantity + 1,
availQuantity: existingCartItem.availQuantity,
),
);
} else {
_items.putIfAbsent(
productId,
() => CartItem(
id: productId,
title: title,
img: img,
price: price,
quantity: 1,
availQuantity: availQuantity,
),
);
}
notifyListeners();
}
}
我尝试了很多方法来转换为字符串,并调用setString(),转换为列表,但无法实现。需要帮助。
它可以看到你的功能,保存在sharedPreference的,你有尝试转换之旅 Cart
在 Map<String, dynamic>
并保存。我想你是想直接保存你的Cart类,但这是不允许的,你只能保存在 int
, string
, List
, Map
...
如果你把Map转换为String,就可以存储它,如下图所示。
import 'dart:convert';
...
String mapToStr = json.encode(map);
当你想把字符串从共享的偏好设置中取出来 并再次作为地图使用时,将它从字符串解码为地图,如下所示。
Map<String, Object> strToMap = json.decode(mapToStr);