Flutter 与提供商共享首选项

问题描述 投票:0回答:0

我正在将提供者的产品信息拉到名为购物车页面的有状态小部件表。

 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],
      ));
    }
flutter sharedpreferences
© www.soinside.com 2019 - 2024. All rights reserved.