我如何使用提供商将 List<object> 存储在 sharedpreferences 中?

how can i store List<object> in sharedpreferences using provider?

所以基本上这就是我的提供商,我想要的是如何将来自提供商的模型数据存储到共享首选项,然后如何对其进行解码以在书签页面中显示它?

class bookmark extends ChangeNotifier{
  int _count = 0;
  List<bookmarkModel> bookM = [];
  
  void addCount(){
    _count++;
   notifyListeners();
  }
  
  void addItems(bookmarkModel i){
   bookM.add(i);
   notifyListeners();
  }

  int get  count => _count;
  List<bookmarkModel> get  bookMList => bookM;

}

这是我的模型:

import 'package:flutter/cupertino.dart';

class bookmarkModel{
  String title;
  String subtitle;
  int num;

  bookmarkModel({this.title, this.subtitle, this.num});

  bookmarkModel.fromJson(Map<String,dynamic> json) :
  title = json['title'], 
  subtitle = json['sutitle'], 
  num = json['num'];

  Map<String, dynamic> toJson()=>{
    'title':title,
    'subtitle':subtitle,
    'num': num
  }; 
}

SharedPreferences 应该只用于存储小而简单的值。它不能用作数据库。

您可以使用 sharedPreferences 来存储 boolStringint 和简单的 List(不是对象列表或地图)。据我所知,它甚至不能存储 doubles.

尝试使用 SQflite or Hive(否-SQL)在本地存储更复杂或更广泛的数据。

您已经准备好使用 toJosnfromJson,您只需将 bookM 转换为地图 josnEnode(),然后使用 [=16] 将其取回=].

试试下面的代码:

void saveBookmark() async{
    SharedPreferences prefs = await SharedPreferences.getInstance();
    final String List = jsonEncode(bookM, toEncodable: (c)=> c.toJson());        
    await prefs.setString('BookMarkList', List);
  }
  void loadBookMark() async{
    SharedPreferences prefs = await SharedPreferences.getInstance();
    final String saved = prefs.getString('BookMarkList');
    final List<dynamic> decoded = jsonDecode(saved);
    bookM = decoded.map((bookmark) => bookmarkModel.fromJson(bookmark));
  }