如何保存列表<对象>Flutter 中的 SharedPreferences? [英] How to save List<Object> to SharedPreferences in Flutter?
本文介绍了如何保存列表<对象>Flutter 中的 SharedPreferences?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有一个最喜欢的音乐列表,我在第一次打开应用程序时从音乐中检索,该应用程序从最喜欢的音乐列表中获取了一个最喜欢的音乐列表.我想将此列表保存到共享
preferences.List最喜欢的音乐 = 新列表<音乐>();
音乐课在哪里:
class 音乐 {最终的 int id;最终字符串名称、大小、评级、持续时间、img;布尔最爱;音乐({这个.id,这个评级,这个大小,this.duration,这个.name,这个.img,这个.最喜欢的,});工厂 Music.fromJson(Map jsonData){返回音乐(id: jsonData['id'],评级:jsonData['评级'],大小:jsonData['size'],持续时间:jsonData['duration'],名称:jsonData['name'],img: jsonData['img'],最喜欢的:假的,);}}
如何保存最喜欢的音乐列表?
解决方案
你应该做这些步骤
保存对象:
<块引用>- 使用
toMap()
方法将您的对象转换为映射 - 使用
encode(...)
方法将您的地图编码为字符串 - 将字符串保存到共享首选项
用于恢复您的对象:
<块引用>- 使用
decode(...)
方法将共享首选项字符串解码为地图 - 使用
fromJson()
方法来获取你的对象
更新完整样本
import 'dart:convert';void main() 异步 {最终 SharedPreferences prefs = await SharedPreferences.getInstance();//在 SharedPreferences 中编码和存储数据最终字符串编码数据 = Music.encode([音乐(id: 1, ...),音乐(id: 2, ...),音乐(id: 3, ...),]);await prefs.setString('musics_key', encodingData);//获取和解码数据final String musicsString = await prefs.getString('musics_key');最终列表<音乐>音乐 = Music.decode(musicsString);}音乐课{最终的 int id;最终字符串名称、大小、评级、持续时间、img;布尔最爱;音乐({这个.id,这个评级,这个大小,this.duration,这个.name,这个.img,这个.最喜欢的,});工厂 Music.fromJson(Map jsonData) {返回音乐(id: jsonData['id'],评级:jsonData['评级'],大小:jsonData['size'],持续时间:jsonData['duration'],名称:jsonData['name'],img: jsonData['img'],最喜欢的:假的,);}静态地图<字符串,动态>toMap(音乐)=>{'id': 音乐.id,'评级':音乐评级,大小":音乐大小,'持续时间':音乐.持续时间,'名称':音乐名称,'img': 音乐.img,'最喜欢的':music.favorite,};静态字符串编码(列表<音乐>音乐)=>json.encode(音乐.map
I have a list of favorite music, which I retrieve from music when the app is opened for the first time, the app gets a favorite music list from favorite. I want to save this list to shared
preferences.List<Music> favoriteMusic = new List<Music>();
where music class is:
class Music {
final int id;
final String name, size, rating, duration, img;
bool favorite;
Music({
this.id,
this.rating,
this.size,
this.duration,
this.name,
this.img,
this.favorite,
});
factory Music.fromJson(Map<String, dynamic> jsonData){
return Music(
id: jsonData['id'],
rating: jsonData['rating'],
size: jsonData['size'],
duration: jsonData['duration'],
name: jsonData['name'],
img: jsonData['img'],
favorite: false,
);
}
}
How can I save favorite music list?
解决方案
You should do these steps
to save the object:
- convert your object to map with
toMap()
method- encode your map to string with
encode(...)
method- save the string to shared preferences
for restoring your object:
- decode shared preference string to a map with
decode(...)
method- use
fromJson()
method to get your object
UPDATE FULL SAMPLE
import 'dart:convert';
void main() async {
final SharedPreferences prefs = await SharedPreferences.getInstance();
// Encode and store data in SharedPreferences
final String encodedData = Music.encode([
Music(id: 1, ...),
Music(id: 2, ...),
Music(id: 3, ...),
]);
await prefs.setString('musics_key', encodedData);
// Fetch and decode data
final String musicsString = await prefs.getString('musics_key');
final List<Music> musics = Music.decode(musicsString);
}
class Music {
final int id;
final String name, size, rating, duration, img;
bool favorite;
Music({
this.id,
this.rating,
this.size,
this.duration,
this.name,
this.img,
this.favorite,
});
factory Music.fromJson(Map<String, dynamic> jsonData) {
return Music(
id: jsonData['id'],
rating: jsonData['rating'],
size: jsonData['size'],
duration: jsonData['duration'],
name: jsonData['name'],
img: jsonData['img'],
favorite: false,
);
}
static Map<String, dynamic> toMap(Music music) => {
'id': music.id,
'rating': music.rating,
'size': music.size,
'duration': music.duration,
'name': music.name,
'img': music.img,
'favorite': music.favorite,
};
static String encode(List<Music> musics) => json.encode(
musics
.map<Map<String, dynamic>>((music) => Music.toMap(music))
.toList(),
);
static List<Music> decode(String musics) =>
(json.decode(musics) as List<dynamic>)
.map<Music>((item) => Music.fromJson(item))
.toList();
}
这篇关于如何保存列表<对象>Flutter 中的 SharedPreferences?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文