【发布时间】:2020-12-22 09:05:21
【问题描述】:
您好,我是 Flutter 的新手,我需要帮助。
我的用例是,我有一个 UserClass、一个 SharedPreferencesModel 和一个带有从 Internet 获取的 UserData 的 DashboardScreen。但是 UserData 存储在缓存中,并通过调用内部 SharedPreferencesModel 中的“readData”-Function 函数“loadUser”,没有填充来自 UserClass 的对象 User...
这里是用户类:
class User {
final String firstname;
final String lastname;
final String club;
final String year;
final String gender;
User({this.firstname, this.lastname, this.year, this.club, this.gender});
factory User.fromJson(Map<String, dynamic> json) {
return new User(
firstname: json['firstname'],
lastname: json['lastname'],
year: json['year_of_birth'],
club: json['club'],
gender: json['gender']);
}
Map<String, dynamic> toJson() {
return {
'firstname': this.firstname,
'lastname': this.lastname,
'club': this.club,
'year_of_birth': this.year,
'gender': this.gender,
};
}
}
这是我的 SharedPreferencesModel:
import 'dart:convert';
import 'package:shared_preferences/shared_preferences.dart';
class SharedPreferencesModel {
// save
storeData(String key, value) async {
final preferences = await SharedPreferences.getInstance();
await preferences.setString(key, jsonEncode(value));
}
// read
readData(String key) async {
final preferences = await SharedPreferences.getInstance();
return jsonDecode(preferences.getString(key));
}
// remove
deleteData(String key) async {
final preferences = await SharedPreferences.getInstance();
preferences.remove(key);
}
}
这是小部件的片段:
SharedPreferencesModel data = new SharedPreferencesModel();
User userDataLoad = new User();
loadUser() async {
try {
// Data are displayed as json in the debugging-terminal
print(await data.readData("user"));
// something its wrong here
User user = User.fromJson(await data.readData("user"));
// "Test 2" is not displayed
print("Test 2");
Scaffold.of(context).showSnackBar(SnackBar(
content: new Text('Daten werden geladen...'),
duration: const Duration(milliseconds: 1000)));
userDataLoad = user;
} catch (Exception) {
Scaffold.of(context).showSnackBar(SnackBar(
content: new Text('Keine Daten gefunden!'),
duration: const Duration(milliseconds: 1000)));
}
}
void initState() {
super.initState();
loadUser();
// only for testing
print("test 1");
}
@override
Widget build(BuildContext context) {
...
感谢您的帮助!
【问题讨论】:
-
说实话,我并没有真正理解你的问题是什么。但乍一看,您的
async函数都没有返回Future,这意味着无论您在做什么,无法正常工作。请先解决这个问题,然后测试您的问题是否已经解决,如果问题仍然存在,请发布您的更新代码和一个好的、逐步的问题描述。 -
@nvoigt 好的,我这样做。非常感谢!
-
另外,由于您没有从 loadUser() 保存 Future 或自己使用
setState,您的函数可能会运行,但不会显示任何结果,因为您的构建不会再次运行。有关更多信息,请参阅stackoverflow.com/questions/63017280/…。 -
@nvoigt 是的,这正是问题所在。我想,我可以绕过 FutureBuilder。
标签: json flutter object sharedpreferences