Как сохранить список <Object>в флаттере SharedPreferences? - PullRequest
1 голос
/ 20 апреля 2020

У меня есть список любимых музыкальных файлов c, которые я получаю из музыки c, когда приложение открывается в первый раз, приложение получает список любимых музыкальных файлов c из избранного. Я хочу сохранить этот список в общий

preferences.List<Music> favoriteMusic = new List<Music>();

, где класс musi c:

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,
    );
  }
}

Как мне сохранить список избранных musi c?

Ответы [ 2 ]

0 голосов
/ 20 апреля 2020

Вы должны выполнить следующие шаги

, чтобы сохранить объект:

  1. преобразовать ваш объект в карту
  2. закодировать вашу карту в строку
  3. сохранить строку в общих настройках

для восстановления объекта:

  1. декодировать строку общих настроек на карту
  2. используйте fromJson() метод для получения вашего Music объекта

ОБНОВЛЕНИЕ ПОЛНЫЙ ОБРАЗЕЦ

import 'dart:convert';

void main() {
  final String encodedData = Music.encodeMusics([
    Music(id: 1),
    Music(id: 2),
    Music(id: 3),
  ]);

  final List<Music> decodedData = Music.decodeMusics(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 encodeMusics(List<Music> musics) => json.encode(
        musics
            .map<Map<String, dynamic>>((music) => Music.toMap(music))
            .toList(),
      );

  static List<Music> decodeMusics(String musics) =>
      (json.decode(musics) as List<dynamic>)
          .map<Music>((item) => Music.fromJson(item))
          .toList();
}
0 голосов
/ 20 апреля 2020

Сначала вы можете преобразовать вашу модель в строку, а затем вы можете сохранить List<String> в SharedPreferences. Вот как вы должны это сделать.

  prefs.setStringList("key", yourList);

SharedPreferences prefs;
List<String> list;
// ...


Future<bool> _saveList() async {
  return await prefs.setStringList("key", list);
}

List<String> _getList() {
  return prefs.getStringList("key");
}
...