是否有任何解决方案可以从共享首选项中存储和检索对象列表?

Posted

技术标签:

【中文标题】是否有任何解决方案可以从共享首选项中存储和检索对象列表?【英文标题】:Is there any solution to store and retrieve list of object from shared preferences? 【发布时间】:2020-01-04 07:04:15 【问题描述】:

我想将对象列表存储到共享首选项中,然后从中取回列表。

我试图存储一个对象列表,但我收到了一个错误,比如不能 对对象进行编码。

 var list = jsonEncode(Building.getInstance().childList.toString());
 pref.putString(SharedKey().CHILD_LIST,list);

我希望获得存储在共享首选项中的对象列表。

【问题讨论】:

***.com/questions/48116773/… 或pub.dev/packages/pref_dessert 我希望将对象列表存储在共享首选项而不是地图中 没有这种方法可以直接存储对象。这是有技术原因的。顺便说一句,pref_dessert 将其存储为 Map 是的。我将列表存储为字符串,然后通过解码自行检索为字符串,但无法获取对象的原始列表,请您帮帮我。 【参考方案1】:

转成字符串,可以存储

import 'dart:convert';
...
var s = json.encode(myMap);
// or var s = jsonEncode(myMap);

json.decode()/jsonDecode() makes a map from a string when you load it.

【讨论】:

【参考方案2】:

您可以将复杂对象列表转换为 json 字符串并使用 setStringList 保存 并使用 getStringList 获取 json 字符串并将其转换回您的复杂对象列表

完整代码演示使用 setStringList 和 getStringList

import 'package:flutter/material.dart';
import 'package:shared_preferences/shared_preferences.dart';

void main() 
  runApp(new MaterialApp(
    home: new Scaffold(
      body: new Center(
        child: new RaisedButton(
          onPressed: _save,
          child: new Text('Save my list of int'),
        ),
      ),
    ),
  ));


_save() async 
  List<String> myListOfStrings=  ["1","2","3","4"];

  List<String> myListOfJsonStrings=  [' "storeid":"123",  "storename":"jock"','   "storeid":"456",  "storename":"abc"' ];

  SharedPreferences prefs = await SharedPreferences.getInstance();
  await prefs.setStringList('mylist', myListOfStrings);

  List<String> myList = (prefs.getStringList('mylist') ?? List<String>()) ;
  print('Your list  $myList');

  await prefs.setStringList('myjsonlist', myListOfJsonStrings);

  List<String> myjsonList = (prefs.getStringList('myjsonlist') ?? List<String>()) ;
  print('Your list  $myjsonList');

【讨论】:

以上是关于是否有任何解决方案可以从共享首选项中存储和检索对象列表?的主要内容,如果未能解决你的问题,请参考以下文章

将 JWT 令牌存储在共享首选项中?并在整个应用程序中检索价值?

使用Gson从共享首选项中检索列表

共享首选项可以是私人的吗?

我的共享首选项存储列表视图的数据并检索它不起作用

如何在不使用共享首选项的情况下将数据存储为颤动的对象[关闭]

共享首选项中的单选按钮和微调器?