【问题标题】:Flutter Save json Response in SharedPreferencesFlutter 在 SharedPreferences 中保存 json 响应
【发布时间】:2020-09-09 15:14:36
【问题描述】:

我正在处理登录 API,我得到了响应

 "code": 200,
    "status": "Login successful",
    "data": {
        "isNewUser": false,
        "customerUUID": "edb67e95-9528-425a-9afd-c67b761570db",
        "userName": "TEST",
        "token": {
            "Accesstoken": "58fd6cb0-f28f-11ea-a9dc-876a9b1d065f",
            "Refreshtoken": "2175bcc1-f2e2-4c6c-b820-e470475c288a",
            "expirationperiod": 1599654407160
        }
    }

我只需要一点帮助来了解如何将此响应保存在共享首选项中,尤其是我需要单独保存它们

【问题讨论】:

  • 到目前为止,您尝试了哪些方法?请分享代码

标签: flutter dart


【解决方案1】:

1.将 JSON 转换为模型类

class LoginModel {
  Data data;
  int code;
  String status;

  LoginModel({this.data, this.code, this.status});

  factory LoginModel.fromJson(Map<String, dynamic> json) {
    return LoginModel(
      data: json['data'] != null ? Data.fromJson(json['data']) : null,
      code: json['code'],
      status: json['status'],
    );
  }

  Map<String, dynamic> toJson() {
    final Map<String, dynamic> data = new Map<String, dynamic>();
    data['code'] = this.code;
    data['status'] = this.status;
    if (this.data != null) {
      data['data'] = this.data.toJson();
    }
    return data;
  }
}

class Data {
  String customerUUID;
  bool isNewUser;
  Token token;
  String userName;

  Data({this.customerUUID, this.isNewUser, this.token, this.userName});

  factory Data.fromJson(Map<String, dynamic> json) {
    return Data(
      customerUUID: json['customerUUID'],
      isNewUser: json['isNewUser'],
      token: json['token'] != null ? Token.fromJson(json['token']) : null,
      userName: json['userName'],
    );
  }

  Map<String, dynamic> toJson() {
    final Map<String, dynamic> data = new Map<String, dynamic>();
    data['customerUUID'] = this.customerUUID;
    data['isNewUser'] = this.isNewUser;
    data['userName'] = this.userName;
    if (this.token != null) {
      data['token'] = this.token.toJson();
    }
    return data;
  }
}

class Token {
  String accesstoken;
  int expirationperiod;
  String refreshtoken;

  Token({this.accesstoken, this.expirationperiod, this.refreshtoken});

  factory Token.fromJson(Map<String, dynamic> json) {
    return Token(
      accesstoken: json['accesstoken'],
      expirationperiod: json['expirationperiod'],
      refreshtoken: json['refreshtoken'],
    );
  }

  Map<String, dynamic> toJson() {
    final Map<String, dynamic> data = new Map<String, dynamic>();
    data['accesstoken'] = this.accesstoken;
    data['expirationperiod'] = this.expirationperiod;
    data['refreshtoken'] = this.refreshtoken;
    return data;
  }
}

2。将编码的 Json 保存在共享首选项中,例如:

LoginModel loginModel = LoginModel.fromJson(apiResponse);
await saveString("key_login", jsonEncode(vendor.toJson()));

3.将此函数归类以保存值

void saveString(String key, String value) async {
  Future<SharedPreferences> _prefs = SharedPreferences.getInstance();
  SharedPreferences preferences = await _prefs;
  preferences.setString(key, value);
}

4.从此函数中获取值:

 Future<LoginModel> getLoginDetail() async {
      var top = await getSession("key_login");
    
      if (top != null) {
        return LoginModel.fromJson(jsonDecode(top));
      } else {
        return null;
      }
    }

【讨论】:

    【解决方案2】:

    要保存 json,您需要将其转换为字符串。

    addStringToSF() async {
      SharedPreferences prefs = await SharedPreferences.getInstance();
      Map<String, dynamic> map = {
                                   "name":"name",
                                   "user":{
                                             "id":12,
                                             "role":"something"
                                          }
                                  }
      prefs.setString('key', json.encode(map));
    }
    

    要以 json 格式检索数据,请使用

    getStringFromSF() async {
      SharedPreferences prefs = await SharedPreferences.getInstance();
      Map<String, dynamic> map = json.decode(prefs.getString('key'));
    }
    

    【讨论】:

      猜你喜欢
      • 2016-05-27
      • 1970-01-01
      • 2019-09-23
      • 2020-03-20
      • 2015-01-03
      • 2021-01-29
      • 1970-01-01
      • 2022-12-09
      • 2019-09-30
      相关资源
      最近更新 更多