代码之家  ›  专栏  ›  技术社区  ›  Dani

在Flatter localstorage上保存对象/列表的最佳方式

  •  0
  • Dani  · 技术社区  · 6 年前

    我读过不同的方法来保存这些信息,但似乎没有什么是正确的书面有关这一点。 大多数人建议使用 SharedPreferences 并对列表进行编码/解码。其他人使用一个函数逐个属性映射列表属性,我觉得这一点都不专业。

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

    举个例子:

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

    我们怎样才能把它存起来,从当地的仓库里拿到呢?

    0 回复  |  直到 4 年前
        1
  •  1
  •   Dani    6 年前

    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 我把pref传递给其他页面,所以我在开始的时候在我的应用程序上加载一次。 这是另一页:

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