代码
print("Before : ${GetStorage().read("XXX")}"); GetStorage().write("XXX", 1); print("After : ${GetStorage().read("XXX")}");
这是我的代码。每次运行应用程序时,输出为
之前:空之后:1
为什么每次重启应用程序时存储数据都会被清除?我认为这是SharedPreference的替代方案,它工作得很好。我错过什么了吗?
tyky79it1#
在任何事情之前,初始化包,通常我在main.dart上这样做
main() async { await GetStorage.init(); }
从GetStorage创建一个示例,我喜欢在盒子上放一个名字,如果没有,默认情况下会放“GetStorage”。它需要有一个名称,以便它可以检索您的数据。
GetStorage getStorage = GetStorage('myData');
之后,您可以从它写入和检索数据,我建议您“等待”所有读取和写入。
await getStorage.write('test', 1); var a = await getStorage.read('test'); print(a); /// 1
我建议你根据你储存的东西在盒子上写上名字。
bq3bfh9z2#
你应该等待GetStorage.init()。
GetStorage.init()
void main() async { await GetStorage.init(); print("Before : ${GetStorage().read("XXX")}"); GetStorage().write("XXX", 1); print("After : ${GetStorage().read("XXX")}"); }
raogr8fs3#
final _userBox = () => GetStorage('User'); class UserPref { void call(){ _userBox.call()..initStorage; } dynamic setValueInt(String key, int value) { return 0.val(key, getBox: _userBox).val = value; } String setValue(String key, String value) { return ''.val(key, getBox: _userBox).val = value; } dynamic getValueInt(String key) { return (-1).val(key,getBox: _userBox).val; } dynamic getValue(String key) { return ''.val(key,getBox: _userBox).val; } void setUser(User user) { ''.val('uname', getBox: _userBox).val = user.uname ?? ''; (-1).val('gender', getBox: _userBox).val = user.gender ?? -1; ''.val('born', getBox: _userBox).val = user.born.toString(); true.val('enabled', getBox: _userBox).val = user.enabled ?? true; } User getUser() { final String? uname = ''.val('uname',getBox: _userBox).val; final int? gender = (-1).val('gender',getBox: _userBox).val; final DateTime? born = ''.val('born',getBox: _userBox).val == '' ? null : DateTime.parse(''.val('born',getBox: _userBox).val); final bool? enabled = true.val('enabled',getBox: _userBox).val; return User( uname: uname, gender: gender, born: born, enabled: enabled, ); } } ///INIT: @override void initState() { //The init function must be written separately from the read/write function due to being asynchronous. UserPref().call(); } //OR Future<void> main() async { //await GetStorage.init(); UserPref().call(); } ///USAGE: class MyStatefulWidget extends StatefulWidget { final Users prefUser = UserPref().getUser(); ... } //OR @override Widget build(BuildContext context) { final Users prefUser = UserPref().getUser(); return ...; }
3条答案
按热度按时间tyky79it1#
在任何事情之前,初始化包,通常我在main.dart上这样做
从GetStorage创建一个示例,我喜欢在盒子上放一个名字,如果没有,默认情况下会放“GetStorage”。它需要有一个名称,以便它可以检索您的数据。
之后,您可以从它写入和检索数据,我建议您“等待”所有读取和写入。
我建议你根据你储存的东西在盒子上写上名字。
bq3bfh9z2#
你应该等待
GetStorage.init()
。raogr8fs3#