我想将对象存储在共享首选项中,其中包含一些字段,例如名称,年龄,电话号码等。我不知道如何在共享偏好中存储对象。
答案 0 :(得分:5)
要将对象保存到共享首选项
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
答案 1 :(得分:4)
在这里搜索了很多文章后你是
要保存数据,必须转成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>;
答案 2 :(得分:3)
您需要先将其序列化为JSON,然后保存并在阅读后反序列化
有关详情,请参见https://flutter.io/docs/development/data-and-backend/json
答案 3 :(得分:0)
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
};
}
}
答案 4 :(得分:0)
从API获取数据并将其保存到共享首选项中
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;
}
我创建了获取详细信息的功能 您可以在App的任何位置调用此功能
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);
});
答案 5 :(得分:0)
如果要从API获取数据,则最初从API端点获取的是字符串,因此您可以将数据存储为原始字符串,并在需要时可以反序列化并在要使用的位置使用它
https://gist.github.com/k1ycee/33bb7e51dac81093f949bbd30d7d0dc9
类似的事情,我的缺点是,如果JSON字符串数据太多,则不建议存储所有字符串,而是反序列化并采用您认为必要的字符串。