首页 > 解决方案 > Flutter - 将 json 数据保存在本地以供将来使用

问题描述

所以,我的问题是,我想在本地保存一个 json 数据,以便用户可以看到他保存的项目。

  Future saveData() async {
    SharedPreferences kitSalvos = await SharedPreferences.getInstance();

    kitSalvos.setString('id', id);
    kitSalvos.setString('content', content);
  }

内容是json数据。

这就是我正在做的事情,但是,当我尝试创建它的列表时,它会带来其他 sharedPreferences。

  _getDataKits() async {
    SharedPreferences kitSalvos = await SharedPreferences.getInstance();
    print(kitSalvos.getKeys());
  }

输出:

{isLogged, senha, email, 20210408, 20210408040319, token, id, content}

我只想带上保存的项目(即 ID 和 CONTENT)共享首选项...

有没有办法让它分开?所以我只能得到ID和CONTENT...

另外,使其成为一个,喜欢和对象:

 kitsalvos = [ id: ID, content: CONTENT ];

将有超过 1 个保存的项目,所以我需要将所有项目分开存储...

标签: flutterdartsharedpreferences

解决方案


您可以将 JSON 保存在字符串中,当您必须使用它时,您可以获取字符串并解析为模型。

创建此模型:

// To parse this JSON data, do
//
//     final kitModel = kitModelFromMap(jsonString);

import 'dart:convert';

KitModel kitModelFromMap(String str) => KitModel.fromMap(json.decode(str));

String kitModelToMap(KitModel data) => json.encode(data.toMap());

class KitModel {
KitModel({
    this.the20210408,
    this.isLogged,
    this.senha,
    this.email,
    this.the20210408040319,
    this.token,
    this.id,
    this.content,
});

String the20210408;
bool isLogged;
String senha;
String email;
String the20210408040319;
String token;
int id;
String content;

factory KitModel.fromMap(Map<String, dynamic> json) => KitModel(
    the20210408: json["20210408"],
    isLogged: json["isLogged"],
    senha: json["senha"],
    email: json["email"],
    the20210408040319: json["20210408040319"],
    token: json["token"],
    id: json["id"],
    content: json["content"],
);

Map<String, dynamic> toMap() => {
    "20210408": the20210408,
    "isLogged": isLogged,
    "senha": senha,
    "email": email,
    "20210408040319": the20210408040319,
    "token": token,
    "id": id,
    "content": content,
    };
}

保存工具包->

SharedPreferences prefs = await SharedPreferences.getInstance();
prefs.setString('content', content);

获取工具包->

dart:convert


SharedPreferences prefs = await SharedPreferences.getInstance();
String KitJson = prefs.getString("content");

if (KitJson != null) {
  kit = KitModel.fromMap(json.decode(KitJson));
}

现在你可以使用

print({kit.id, kit.content, kit.toke, kit.isLogged}); //And so on

推荐阅读