我正在使用provider将产品信息拉到名为cart page的statefulwidget表中。
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方法将注册到savedorder的产品信息初始化,但这不起作用
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],
));
}
1条答案
按热度按时间0lvr5msh1#
从
SharedPreferences
获取数据是一个异步操作,可以使用Futures
和FutureBuilder
来处理。可以按如下方式使用此模式:
将future从这个函数传递给FutureBuilder的一个示例,当future完成时,它会重新构建小部件。