我如何使用提供商将 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
来存储 bool
、String
、int
和简单的 List
(不是对象列表或地图)。据我所知,它甚至不能存储 doubles
.
您已经准备好使用 toJosn
和 fromJson
,您只需将 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));
}
所以基本上这就是我的提供商,我想要的是如何将来自提供商的模型数据存储到共享首选项,然后如何对其进行解码以在书签页面中显示它?
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
来存储 bool
、String
、int
和简单的 List
(不是对象列表或地图)。据我所知,它甚至不能存储 doubles
.
您已经准备好使用 toJosn
和 fromJson
,您只需将 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));
}