如何在颤动中将 Map<String, List<object>> 保存在 sharedPreferences 中?

Posted

技术标签:

【中文标题】如何在颤动中将 Map<String, List<object>> 保存在 sharedPreferences 中?【英文标题】:How do I save Map<String, List<object>> in sharedPreferences in flutter? 【发布时间】:2021-10-21 21:29:35 【问题描述】:

我正在尝试在 sharedPreferences 中保存 Map&lt;String, List&lt;MyObj&gt;&gt;。 我尝试使用经典的sharedPreferences 包,但遇到了麻烦。 如果我将字符串保存到 sharedPreferences,那么当我尝试检索和使用 json.decode(...) 时, 我收到错误 Unhandled Exception: FormatException: Unexpected character (at character 2)... 如果我尝试使用 json.encode(...) 保存它,我会收到错误 Unhandled Exception: Converting object to an encodable object failed: Instance of 'MyObj'。 我要保存的是这样的:

ExampleString: [Instance of 'MyObj', Instance of 'MyObj'...], ExampleString2: [Instance of 'MyObj', Instance of 'MyObj'...], ...

我该如何解决这个问题? 有没有可以保存地图的包?

【问题讨论】:

【参考方案1】:

你有一个自定义对象:

class User 
  String name;
  String age;
  String location;

  User();

创建 toJson 和 fromJson:

Map<String, dynamic> toJson() => 
  'name': name,
  'age': age,
  'location': location,
;

User.fromJson(Map<String, dynamic> json)
    : name = json['name'],
      age = json['age'],
      location = json['location'];

然后这样保存:

prefs.setString(key, json.encode(value));

像这样加载它:

json.decode(prefs.getString(key));

【讨论】:

完美,似乎它正在工作,toJson() 方法丢失了,但现在我收到错误 Unhandled Exception: type '_InternalLinkedHashMap' is not a subtype of type 'Map>'

以上是关于如何在颤动中将 Map<String, List<object>> 保存在 sharedPreferences 中?的主要内容,如果未能解决你的问题,请参考以下文章

如何在颤动中将对象编码为 Json

如何在颤动中将 List<String> 转换为 String [重复]

如何在颤动的 POST 请求中将 Map 作为字符串发送?

如何在颤动中将值设置为下拉列表?

如何在 Java Stream 中将 POJO 的列表转换为 Map<String,List>?

如何在颤动中将 json 数据转换为 List<widgets>?