在Flutter Localstorage上保存对象/列表的最佳方法

时间:2019-11-09 00:14:32

标签: flutter flutter-dependencies

我已经阅读了保存此信息的不同方法,但是似乎没有关于此的任何适当的文字。 大多数人建议使用SharedPreferences并对列表进行编码/解码。其他人使用一个函数按属性映射列表属性,而我根本找不到这个专业人员。

默认情况下,该库可以保存不同的类型,但列表之间不存在。

有这个例子:

final _myList = [
{one: 1, two: 2},
{one: 1, two: 2},
];

我们如何保存并从Flutter的本地存储中获取它?

1 个答案:

答案 0 :(得分:0)

main.dart

void main() {
  SharedPreferences.getInstance().then((prefs) {
    runApp(MyApp(prefs: prefs));
  });
}

class MainScreen extends StatefulWidget {
  MainScreen({Key key, this.prefs}) : super(key: key);
  final SharedPreferences prefs;
...

我从MainScreen将首选项传递到其余页面,因此一开始就将其加载到我的应用程序中。 这是另一个页面:

class MyState extends State<TeamsPage> {
  List _teams = [];
  SharedPreferences _prefs = null;

  @override
  void initState() {
    _prefs = widget.data["prefs"];
    _getTeams();
  }

  _getTeams() async {
    if (_prefs.containsKey("teams") == null || _prefs.get('teams') == null) {
      _teams = [
        {"name": "Team 1", "avatar": "assets/images/draw.jpg"},
        {"name": "Team 2", "avatar": "assets/images/draw1.jpg"},
        {"name": "Team 3", "avatar": "assets/images/draw2.jpg"},
        {"name": "Team 4", "avatar": "assets/images/draw3.jpg"}
      ];
      _prefs.setString("teams", json.encode(_teams));
    } else {
      _teams = json.decode(_prefs.get('teams'));
    }
  }