如何保存列表<对象>Flutter 中的 SharedPreferences? [英] How to save List&lt;Object&gt; to SharedPreferences in Flutter?

查看:191
本文介绍了如何保存列表<对象>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'],最喜欢的:假的,);}}

如何保存最喜欢的音乐列表?

解决方案

你应该做这些步骤

保存对象:

<块引用>

  1. 使用 toMap() 方法将您的对象转换为映射
  2. 使用 encode(...) 方法将您的地图编码为字符串
  3. 将字符串保存到共享首选项

用于恢复您的对象:

<块引用>

  1. 使用 decode(...) 方法将共享首选项字符串解码为地图
  2. 使用 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>((music) => Music.toMap(music)).toList(),);静态列表<音乐>解码(弦乐)=>(json.decode(musics) as List).map((item) => Music.fromJson(item)).toList();}

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:

  1. convert your object to map with toMap() method
  2. encode your map to string with encode(...) method
  3. save the string to shared preferences

for restoring your object:

  1. decode shared preference string to a map with decode(...) method
  2. 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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆