有什么解决方案可以从共享首选项存储和检索对象列表?

时间:2019-08-31 09:16:24

标签: list object flutter sharedpreferences

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

我尝试存储对象列表,但出现错误,例如无法  编码对象。

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

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

2 个答案:

答案 0 :(得分:0)

您可以将复杂的对象列表转换为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');
}

答案 1 :(得分:0)

将其转换为字符串,您可以存储它

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.