我正在将提供者的产品信息拉到名为购物车页面的有状态小部件表。
Row(
mainAxisAlignment: MainAxisAlignment.start,
children: [
IconButton(
onPressed: () {
Provider.of<Count>(context,
listen: false)
.addItem(
items[index].name,
1,
items[index].price,
items[index].imagePath);
},
icon: Icon(Icons.add),
),
Text(items[index].count.toString()),
IconButton(
onPressed: () {
Provider.of<Count>(context,
listen: false)
.removeItem(items[index]);
},
icon: Icon(Icons.remove),
),
],
),
我安装了shared_preferences包,防止程序关闭再打开后这些产品丢失。 当按下提升按钮时,我使用 _saveorder 方法保存出现在页面上的产品。
onPressed: () {
_saveOrder(items);
Navigator.push(
context,
MaterialPageRoute(builder: (context) => HomePage()),
);
// onPressed event
},
保存订单代码=
final prefs = await SharedPreferences.getInstance();
final orders = prefs.getStringList('orders') ?? [];
final orderDetails = cartItems.map((item) {
return '${item.name},${item.count},${item.price},${item.imagePath}';
}).join(';');
orders.add(orderDetails);
await prefs.setStringList('orders', orders);
}
再次打开应用时,我想用loadorders方法将saveorder注册的商品信息设为initstate,但是不行
Count countObject = Count();
@override
void initState() {
super.initState();
_loadOrders();
}
Future<void> _loadOrders() async {
final prefs = await SharedPreferences.getInstance();
final orders = prefs.getStringList('orders') ?? [];
List<CartItem> cartItems = [];
for (String order in orders) {
List<String> orderDetails = order.split(',');
cartItems.add(CartItem(
name: orderDetails[0],
count: int.parse(orderDetails[1]),
price: double.parse(orderDetails[2]),
imagePath: orderDetails[3],
));
}