Flutter 如何保存列表<;对象>;分享参考资料?
我有一个最喜欢的音乐列表,当应用程序第一次打开时,我从音乐中检索到它,应用程序从favorite中获取最喜欢的音乐列表。我想将此列表保存到共享Flutter 如何保存列表<;对象>;分享参考资料?,flutter,sharedpreferences,Flutter,Sharedpreferences,我有一个最喜欢的音乐列表,当应用程序第一次打开时,我从音乐中检索到它,应用程序从favorite中获取最喜欢的音乐列表。我想将此列表保存到共享 preferences.List<Music> favoriteMusic = new List<Music>(); preferences.List-favoriteMusic=new-List(); 音乐课在哪里: class Music { final int id; final String name, siz
preferences.List<Music> favoriteMusic = new List<Music>();
preferences.List-favoriteMusic=new-List();
音乐课在哪里:
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,
);
}
}
课堂音乐{
最终int id;
最终字符串名称、大小、评级、持续时间、img;
布尔最爱;
音乐({
这个身份证,
这个.评级,,
这个尺寸,
这个时间,,
这个名字,
这个.img,,
这是我最喜欢的,
});
factory Music.fromJson(映射jsonData){
回音(
id:jsonData['id'],
评级:jsonData[“评级”],
大小:jsonData['size'],
持续时间:jsonData['duration'],
名称:jsonData['name'],
img:jsonData['img'],
最喜欢的:假,
);
}
}
如何保存喜爱的音乐列表?您应该执行以下步骤 要保存对象,请执行以下操作:
toMap()
方法将对象转换为贴图encode(…)
方法将地图编码为字符串decode(…)
方法将共享首选项字符串解码到映射fromJson()
方法获取对象更新完整样本
import 'dart:convert';
void main() {
final String encodedData = Music.encode([
Music(id: 1, ...),
Music(id: 2, ...),
Music(id: 3, ...),
]);
final List<Music> decodedData = Music.decode(encodedData);
print(decodedData);
}
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();
}
导入'dart:convert';
void main(){
最终字符串encodedData=Music.encode([
音乐(id:1,…),
音乐(id:2,…),
音乐(id:3,…),
]);
最终列表decodedata=Music.decode(encodedData);
打印(解码数据);
}
课堂音乐{
最终int id;
最终字符串名称、大小、评级、持续时间、img;
布尔最爱;
音乐({
这个身份证,
这个.评级,,
这个尺寸,
这个时间,,
这个名字,
这个.img,,
这是我最喜欢的,
});
factory Music.fromJson(映射jsonData){
回音(
id:jsonData['id'],
评级:jsonData[“评级”],
大小:jsonData['size'],
持续时间:jsonData['duration'],
名称:jsonData['name'],
img:jsonData['img'],
最喜欢的:假,
);
}
静态映射图(音乐)=>{
“id”:music.id,
“评级”:音乐。评级,
“大小”:music.size,
“持续时间”:music.duration,
“name”:music.name,
“img”:music.img,
“收藏”:音乐。收藏,
};
静态字符串编码(列表音乐)=>json.encode(
音乐
.map((音乐)=>music.toMap(音乐))
.toList(),
);
静态列表解码(字符串音乐)=>
(json.decode(music)作为列表)
.map((项)=>Music.fromJson(项))
.toList();
}
将其转换为字符串,您可以存储它
import 'dart:convert';
...
var s = json.encode(myList);
// or var s = jsonEncode(myList);
json.decode() //convert a string to List when you load it
对于像我这样的noob人来说,如果他们想更多地了解我们亲爱的朋友Hamed在他的回答中所做的魔术,或者想让他的解决方案适应更复杂的列表类/其他类,请查看以下两个链接:
JSONECODE()和jsonDecode()与json.encode()和json.decode()相同。FLATTER的
共享首选项
插件有一个方法:setStringList(字符串键,列表值)
,所以你可以为你的对象编写序列化程序。你可以在保存中序列化你的对象,在检索时反序列化它。@Hamed Sorry,但是你能帮我进行序列化吗?我对颤振还不熟悉,对此有一些问题吗?我添加了一个答案。这个方法只适用于1个对象吗?你可以轻松地将它扩展为一个对象列表。你只需要创建一个映射列表。我非常爱你brooo:))这实际上解决了我保存对象列表的问题,但是它只在对象的原始数据类型作为其变量时起作用。在我的例子中,MyObject中有一个列表作为变量。有解决办法吗?谢谢你,兄弟!!