翩翩将Map<String, Object>保存到共享首选项。

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

这是我存储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(),转换为列表,但无法实现。需要帮助。

flutter sharedpreferences shopping-cart
2个回答
0
投票

它可以看到你的功能,保存在sharedPreference的,你有尝试转换之旅 CartMap<String, dynamic> 并保存。我想你是想直接保存你的Cart类,但这是不允许的,你只能保存在 int, string, List, Map ...


0
投票

如果你把Map转换为String,就可以存储它,如下图所示。

import 'dart:convert';
...
String mapToStr = json.encode(map);

当你想把字符串从共享的偏好设置中取出来 并再次作为地图使用时,将它从字符串解码为地图,如下所示。

Map<String, Object> strToMap = json.decode(mapToStr);
© www.soinside.com 2019 - 2024. All rights reserved.