我正在将转换为字符串的模态对象保存到 SharedPreference 并终止应用程序。但是当我回到应用程序时 SharedPreference 已经丢失了保存的数据。我是新来的。请帮忙。我想保存我的数据并杀死应用程序并在回来时再次检索。
这是我的代码
class HomeScreen extends StatefulWidget {
HomeScreen({Key? key}) : super(key: key);
@override
State<HomeScreen> createState() => _HomeScreenState();
}
class _HomeScreenState extends State<HomeScreen> with WidgetsBindingObserver {
List<User> selectedUser = [];
List<User> visibleUser = [];
double screenHeight = 0.0;
static const _keyUser = 'users';
@override
initState() {
super.initState();
WidgetsBinding.instance!.addObserver(this);
getUsersFromSharedPref();
}
Future<void> getUsersFromSharedPref() async {
final pref = await SharedPreferences.getInstance();
setState((){
String savedJson = pref.getString(_keyUser) ?? '';
if(savedJson.length > 0) {
selectedUser = UserApi.getUsersFromSharedPref(savedJson);
}
});
}
Future<void> saveInSharedPref() async {
final pref = await SharedPreferences.getInstance();
String encodedData = UserApi.getStringFromobject(selectedUser);
await pref.setString(_keyUser , encodedData);
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: FutureBuilder<List<User>>(
future: UserApi.getUserLocally(context),
builder: (context, snapshot) {
final allUsers = (selectedUser.isNotEmpty) ? selectedUser : snapshot.data;
visibleUser = (selectedUser.isNotEmpty)?(selectedUser.where((aUser) => (aUser.isDefaultUser)).toList()) : (allUser!.where((aUser) => (aUser.isDefaultUser)).toList());
.
.
.
})
);
}
@override
void dispose() {
super.dispose();
}
@override
void didChangeAppLifecycleState(AppLifecycleState state) {
super.didChangeAppLifecycleState(state);
final isBackground = state == AppLifecycleState.paused;
if (isBackground || (state == AppLifecycleState.inactive ||
state == AppLifecycleState.detached)) {
saveInSharedPref();
}
if(state == AppLifecycleState.resumed){
getUserFromSharedPref();
}
}
}
class UserApi {
static Future<List<User>> getUserLocally(BuildContext context) async {
final assetBundle = DefaultAssetBundle.of(context);
final data = await assetBundle.loadString('assets/data/Users.json');
final body = json.decode(data.toString()).cast<Map<String, dynamic>>();
return body.map<User>((json) => new User.fromJson(json)).toList();
}
static List<User> getUserFromSharedPref(String jsonString){
final body = json.decode(jsonString).cast<Map<String, dynamic>>();
return body.map<User>((json) => new User.fromJson(json)).toList();
}
}
从 SharedPreferences 杀死应用程序后,我没有得到保存的数据。