【发布时间】:2019-05-24 16:25:24
【问题描述】:
我想在共享首选项中存储一个对象,其中包含一些字段,如姓名、年龄、电话号码等。我不知道如何在颤振中将对象存储在共享首选项中。
【问题讨论】:
标签: flutter
我想在共享首选项中存储一个对象,其中包含一些字段,如姓名、年龄、电话号码等。我不知道如何在颤振中将对象存储在共享首选项中。
【问题讨论】:
标签: flutter
SharedPreferences shared_User = await SharedPreferences.getInstance();
Map decode_options = jsonDecode(jsonString);
String user = jsonEncode(User.fromJson(decode_options));
shared_User.setString('user', user);
SharedPreferences shared_User = await SharedPreferences.getInstance();
Map userMap = jsonDecode(shared_User.getString('user'));
var user = User.fromJson(userMap);
class User {
final String name;
final String age;
User({this.name, this.age});
factory User.fromJson(Map<String, dynamic> parsedJson) {
return new User(
name: parsedJson['name'] ?? "",
age: parsedJson['age'] ?? "");
}
Map<String, dynamic> toJson() {
return {
"name": this.name,
"age": this.age
};
}
}
【讨论】:
在这里搜索了很多文章后,你是
为了保存数据,必须转换为 JSON
SharedPreferences prefs = await SharedPreferences.getInstance();
Map<String, dynamic> user =
{'Usrname':'tom','Password':'pass@123'};
bool result = await prefs.setString('user', jsonEncode(user));
对于 Gettin 数据,必须从 JSON 反转换
String userPref = prefs.getString('user');
Map<String,dynamic> userMap = jsonDecode(userPref) as Map<String, dynamic>;
【讨论】:
将对象保存到共享首选项
SharedPreferences pref = await SharedPreferences.getInstance();
Map json = jsonDecode(jsonString);
String user = jsonEncode(UserModel.fromJson(json));
pref.setString('userData', user);
从共享首选项中获取对象
SharedPreferences pref = await SharedPreferences.getInstance();
Map json = jsonDecode(pref.getString('userData'));
var user = UserModel.fromJson(json);
你需要导入下面提到的包
import 'package:shared_preferences/shared_preferences.dart';
import 'dart:convert';
创建模型的最简单方法 按照这个答案-> https://stackoverflow.com/a/58708634/9236994
【讨论】:
需要先序列化成JSON再保存,读取后反序列化
详情请见https://flutter.io/docs/development/data-and-backend/json
【讨论】:
从 API 获取数据并将其保存到 Sharepreference 时
Future<UserDetails> UserInfo({String sesscode, regno}) async{
await Future.delayed(Duration(seconds: 1));
SharedPreferences preferences = await SharedPreferences.getInstance();
var map = new Map<String, String>();
map["sesscode"] = sesscode;
map["regno"] = regno;
var response = await http.post(Base_URL().user_info, body: map);
Map decodedata = json.decode(response.body);
if(decodedata != null){
String user = jsonEncode(UserDetails.fromJson(decodedata));
preferences.setString(SharePrefName.infoPref, user);
return UserDetails.fromJson(decodedata);
}
return null;
}
我创建了一个获取详细信息的函数 您可以在应用程序的任何位置调用此函数
Future<UserDetails> getSavedInfo()async{
SharedPreferences preferences = await SharedPreferences.getInstance();
Map userMap = jsonDecode(preferences.getString(SharePrefName.infoPref));
UserDetails user = UserDetails.fromJson(userMap);
return user;
}
现在,我在一个类中调用它来获取用户名
Future<UserDetails> usd = getSavedInfo();
usd.then((value){
print(value.surname);
});
【讨论】:
如果您从 API 获取数据,最初从 API 端点获取的是字符串,因此您可以将数据存储为原始字符串,并在需要时对其进行反序列化并在您想使用的地方使用它
https://gist.github.com/k1ycee/33bb7e51dac81093f949bbd30d7d0dc9
类似这样,我觉得缺点是如果 JSON 字符串数据太多,可能不建议存储所有字符串,而是将其反序列化并获取您认为必要的字符串。
【讨论】: