繁体   English   中英

如何在 SharedPreferences flutter 中保存列表数据

[英]How to save list data in SharedPreferences flutter

我与数据库进行数据连接以带来数据列表,例如以下代码:


  var listDATA = [];
  Future listDATAs() async {
    api = '*************';
    var response = await http.post(Uri.parse(api));

    var responsebody = jsonDecode(response.body);

    if (responsebody.length >0){

      for (int i = 0; i < responsebody.length; i++) {
        listDATA.add(responsebody[i]['name']+ ':' + responsebody[i]['image'].toString());

      }

      return responsebody;
    }else{


    }
  }

如何将 listDATA 存储在我需要保存名称和图像的共享首选项中? 存储后调用显示

最好不要在 SharedPreferences 中存储非原始数据类型,因为默认情况下它只支持原始数据类型。 但仍然有办法做到这一点。

您可以存储 API 调用的响应正文,而无需将 JSON 解码为String值。

// Obtain shared preferences.
final prefs = await SharedPreferences.getInstance();
// Save an String value to 'response' key.
await prefs.setString('response', response.body);

如果你有 List 的响应类型,你可以使用setStringList方法

await prefs.setStringList('items', <String>['Earth', 'Moon', 'Sun']);

通过这种方式,您可以将列表值存储在共享首选项中

static setListValue(String key, List< ProductsModel > value) async {
SharedPreferences prefs = await SharedPreferences.getInstance();
prefs.setString(key, jsonEncode(value.map((e) => e.toJson()).toList()));
}

她我制定了一个标准方法来存储来自任何 class 的列表值,方法是调用

setListValue('store_list', listData);

之后,您必须制定一种获取此列表值的方法

//getListValue
static Future<List<ProductsModel>?> getListValue(String key) async {
SharedPreferences prefs = await SharedPreferences.getInstance();
final dataMap = jsonDecode(prefs.getString(key) ?? '[]') as 
List<dynamic>;

return dataMap.map<ProductsModel>((item) {
  return ProductsModel.fromJson(item);
}).toList();
}

之后,您可以像这样调用此方法

var listValue = await SPUtils.getListValue('store_list');

// 用于将列表保存在共享首选项中

final prefs = await SharedPreferences.getInstance(); prefs.setString("list",jsonEncode(listDATA));

// 从共享首选项中获取列表

final prefs = await SharedPreferences.getInstance();

List listDATA = jsonDecode(prefs.get("list"));

您可以按照这些步骤操作。

  1. 使用toMap()方法将您的 object 转换为 map。
  2. 使用encode()方法将您的 map 编码为字符串。
    将字符串保存到共享首选项。

最终 SharedPreferences 首选项 = await SharedPreferences getInstance ();

await首选项。 setString ('key', 编码数据);

// 获取和解码数据

final String musicsString = await首选项。 getString ('musics_key');

例子:

import 'dart:convert';

void main() async {  
 final SharedPreferences prefs = await SharedPreferences.getInstance();

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 {  

最终的 int id;
最终字符串名称、大小、等级、持续时间、img; 最喜欢的布尔值;

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

如何保存列表<object>到 Flutter 中的 SharedPreferences?<div id="text_translate"><p> 我有一个最喜欢的音乐列表,我在第一次打开应用程序时从音乐中检索,该应用程序从收藏夹中获取最喜欢的音乐列表。 我想将此列表保存到共享</p><pre>preferences.List&lt;Music&gt; favoriteMusic = new List&lt;Music&gt;();</pre><p> 其中音乐 class 是:</p><pre> 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&lt;String, dynamic&gt; jsonData){ return Music( id: jsonData['id'], rating: jsonData['rating'], size: jsonData['size'], duration: jsonData['duration'], name: jsonData['name'], img: jsonData['img'], favorite: false, ); } }</pre><p> 如何保存最喜欢的音乐列表?</p></div></object>

[英]How to save List<Object> to SharedPreferences in Flutter?

Flutter 如何保存和显示列表<object>共享首选项?<div id="text_translate"><p> 我想保存并阅读一个名为 coursefav 的元素列表。</p><p> 我有以下代码,我在其中制作了 class 的 map,但我不知道如何保存字符串 map 的元素,然后在列表中一个一个地显示,然后在列表视图中显示所有元素。</p><p> 这就是我所拥有的</p><pre>//my class class curso { final String title; final String entidad; final String categoria; final String emision; final String imgcourse; final String urlcourse; final String idioma; final String duracion; final String description; curso({ required this.title, required this.entidad, required this.categoria, required this.emision, required this.imgcourse, required this.urlcourse, required this.idioma, required this.duracion, required this.description, }); Map&lt;String, dynamic&gt; toMap() { return { 'title': title, 'entidad': entidad, 'categoria': categoria, 'emision': emision, 'imgcourse': imgcourse, 'urlcourse': urlcourse, 'idioma': idioma, 'duracion': duracion, 'description': description, }; } curso.fromMap(Map&lt;String, dynamic&gt; res): title = res["title"], entidad = res["entidad"], categoria = res["categoria"], emision = res["emision"], imgcourse = res["imgcourse"], urlcourse = res["urlcourse"], idioma = res["idioma"], duracion = res["duracion"], description = res["description"]; @override String toString() { return 'curso{title: $title, entidad: $entidad, categoria: $categoria, emision: $emision, imgcourse: $imgcourse, urlcourse: $urlcourse, idioma: $idioma, duracion: $duracion, description: $description}'; } }</pre><p> 我就是这样称呼的</p><pre> void saveCourseFavSP(String title,String entidad,String categoria,String emision,String imgcourse,String urlcourse,String idioma,String duracion,String description) async { //init sharedpreferences SharedPreferences cursosFav = await SharedPreferences.getInstance(); //object variable to load the info final testCursoFav = curso( title: title, entidad: entidad, categoria: categoria, emision: emision, imgcourse: imgcourse, urlcourse: urlcourse, idioma: idioma, duracion: duracion, description: description); String json = jsonEncode(testCursoFav); print("generating json $json"); //sending all items object to sharedPreferences cursosFav.setString('coursesFavorites', json); //here i want to insert String to List&lt;Strin&gt; //sending String to something like.upperCase //but i dont know how to parse and how to read List&lt;String&gt; lista = jsonDecode(json); } loadDataCursosFavSP() async { SharedPreferences cursosFav = await SharedPreferences.getInstance(); String? json = cursosFav.getString("coursesFavorites"); print("datos de curso favorito cargados:\n $json"); if (json == null) { print("Items doesn't exist"); } else { Map&lt;String, dynamic&gt; map = jsonDecode(json); final cursofav = curso.fromMap(map); print( "titulo fav: ${cursofav.title}, ${cursofav.entidad},${cursofav.emision},"); } } clearDataCursosFavSP() async { SharedPreferences cursosFav = await SharedPreferences.getInstance(); cursosFav.clear(); print("ALL ITEMS LIST ARE DELETED"); }</pre></div></object>

[英]Flutter How to save and show List<Object> to SharedPreferences?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 如何在 Flutter 的 SharedPreferences 中保存列表 如何保存列表<list<string> &gt; 在 Flutter 中使用 SharedPreferences </list<string> 如何保存列表<object>到 Flutter 中的 SharedPreferences?<div id="text_translate"><p> 我有一个最喜欢的音乐列表,我在第一次打开应用程序时从音乐中检索,该应用程序从收藏夹中获取最喜欢的音乐列表。 我想将此列表保存到共享</p><pre>preferences.List&lt;Music&gt; favoriteMusic = new List&lt;Music&gt;();</pre><p> 其中音乐 class 是:</p><pre> 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&lt;String, dynamic&gt; jsonData){ return Music( id: jsonData['id'], rating: jsonData['rating'], size: jsonData['size'], duration: jsonData['duration'], name: jsonData['name'], img: jsonData['img'], favorite: false, ); } }</pre><p> 如何保存最喜欢的音乐列表?</p></div></object> Flutter 如何保存和显示列表<object>共享首选项?<div id="text_translate"><p> 我想保存并阅读一个名为 coursefav 的元素列表。</p><p> 我有以下代码,我在其中制作了 class 的 map,但我不知道如何保存字符串 map 的元素,然后在列表中一个一个地显示,然后在列表视图中显示所有元素。</p><p> 这就是我所拥有的</p><pre>//my class class curso { final String title; final String entidad; final String categoria; final String emision; final String imgcourse; final String urlcourse; final String idioma; final String duracion; final String description; curso({ required this.title, required this.entidad, required this.categoria, required this.emision, required this.imgcourse, required this.urlcourse, required this.idioma, required this.duracion, required this.description, }); Map&lt;String, dynamic&gt; toMap() { return { 'title': title, 'entidad': entidad, 'categoria': categoria, 'emision': emision, 'imgcourse': imgcourse, 'urlcourse': urlcourse, 'idioma': idioma, 'duracion': duracion, 'description': description, }; } curso.fromMap(Map&lt;String, dynamic&gt; res): title = res["title"], entidad = res["entidad"], categoria = res["categoria"], emision = res["emision"], imgcourse = res["imgcourse"], urlcourse = res["urlcourse"], idioma = res["idioma"], duracion = res["duracion"], description = res["description"]; @override String toString() { return 'curso{title: $title, entidad: $entidad, categoria: $categoria, emision: $emision, imgcourse: $imgcourse, urlcourse: $urlcourse, idioma: $idioma, duracion: $duracion, description: $description}'; } }</pre><p> 我就是这样称呼的</p><pre> void saveCourseFavSP(String title,String entidad,String categoria,String emision,String imgcourse,String urlcourse,String idioma,String duracion,String description) async { //init sharedpreferences SharedPreferences cursosFav = await SharedPreferences.getInstance(); //object variable to load the info final testCursoFav = curso( title: title, entidad: entidad, categoria: categoria, emision: emision, imgcourse: imgcourse, urlcourse: urlcourse, idioma: idioma, duracion: duracion, description: description); String json = jsonEncode(testCursoFav); print("generating json $json"); //sending all items object to sharedPreferences cursosFav.setString('coursesFavorites', json); //here i want to insert String to List&lt;Strin&gt; //sending String to something like.upperCase //but i dont know how to parse and how to read List&lt;String&gt; lista = jsonDecode(json); } loadDataCursosFavSP() async { SharedPreferences cursosFav = await SharedPreferences.getInstance(); String? json = cursosFav.getString("coursesFavorites"); print("datos de curso favorito cargados:\n $json"); if (json == null) { print("Items doesn't exist"); } else { Map&lt;String, dynamic&gt; map = jsonDecode(json); final cursofav = curso.fromMap(map); print( "titulo fav: ${cursofav.title}, ${cursofav.entidad},${cursofav.emision},"); } } clearDataCursosFavSP() async { SharedPreferences cursosFav = await SharedPreferences.getInstance(); cursosFav.clear(); print("ALL ITEMS LIST ARE DELETED"); }</pre></div></object> 如何使用 SharedPreferences 保存列表? 如何使用 SharedPreferences 从 Flutter 的列表中保存多个布尔值 如何使用 SharedPreferences 在 Flutter 中保存字符串列表 如何在 Flutter 中使用 SharedPreferences 保存 DateFormat? 如何使用 SharedPreferences 在文本字段 flutter 中正确保存数据? 如何将JSON的数组保存到Flutter中的SharedPreferences?
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM