J'ai une liste de musiques préférées, que je récupère à partir de la musique lorsque l'application est ouverte pour la première fois, l'application obtient une liste de musique préférée à partir des favoris. Je souhaite enregistrer cette liste pour la partager
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, ); } }
où la classe de musique est:
preferences.List<Music> favoriteMusic = new List<Music>();
Comment puis-je enregistrer la liste de musique préférée?
3 Réponses :
Tout d'abord, vous pouvez convertir votre modèle en chaîne, puis enregistrer la List<String>
dans SharedPreferences
. Voici comment procéder.
SharedPreferences prefs; List<String> list; // ... Future<bool> _saveList() async { return await prefs.setStringList("key", list); } List<String> _getList() { return prefs.getStringList("key"); }
prefs.setStringList("key", yourList);
Oui, je sais mais j'ai besoin de la liste <object> pour les données de sortie de la liste sur le widget.
@sumseflut Vous ne pouvez pas stocker directement votre List<object>
dans les sharedPreferences
. Vous devez convertir votre modèle mappé en chaîne JSON, puis le stocker dans sharedPreferences
. Pendant que vous obtenez la liste de sharedPreferences
cette chaîne JSON à vos objets de modèle en utilisant [JSON et sérialisation] ( flutter.dev/docs/development/data-and-backend/json ).
Vous devriez suivre ces étapes
pour enregistrer l'objet:
- convertir votre objet en carte avec la méthode
toMap()
- encodez votre carte en chaîne avec la méthode
encode(...)
- enregistrer la chaîne dans les préférences partagées
pour restaurer votre objet:
- décoder la chaîne de préférence partagée en une carte avec la méthode
decode(...)
- utilisez la méthode
fromJson()
pour obtenir votre objet
METTRE À JOUR L'ÉCHANTILLON COMPLET
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(); }
est cette méthode uniquement pour 1 objet?
vous pouvez facilement le développer pour une liste d'objets. il vous suffit de créer une liste de cartes.
Je t'aime tellement brooo :)))
cela a en fait résolu mon problème pour enregistrer la liste d'objets, mais cela ne fonctionne que si cet objet a un type de données primitif comme variables. Dans mon cas, MyObject contient une List <String> en tant que variable. Toute solution? Merci
Convertissez-le en chaîne, vous pouvez le stocker
import 'dart:convert'; ... var s = json.encode(myList); // or var s = jsonEncode(myList); json.decode() //convert a string to List when you load it
vous pouvez sérialiser votre objet lors de la sauvegarde et le désérialiser à la récupération.
@Hamed Sorrry, mais pouvez-vous m'aider avec la sérialisation, je suis nouveau dans le flutter et j'ai un problème avec ça?
J'ai ajouté une réponse.