![](/img/trans.png)
[英]Flutter Plugin With Kotlin, Activity always returns null
[英]GetStorage always returns null in flutter
代码
print("Before : ${GetStorage().read("XXX")}");
GetStorage().write("XXX", 1);
print("After : ${GetStorage().read("XXX")}");
这是我的代码。 每次我运行应用程序时,Output 都是
之前:null
之后:1
为什么每次重启App都会清空存储数据? 我认为这是 SharedPreference 的替代方案,效果很好。 我错过了什么吗?
您应该等待GetStorage.init()
。
void main() async {
await GetStorage.init();
print("Before : ${GetStorage().read("XXX")}");
GetStorage().write("XXX", 1);
print("After : ${GetStorage().read("XXX")}");
}
在任何事情之前,初始化包,通常我在 main.dart 上执行此操作
main() async {
await GetStorage.init();
}
从 GetStorage 创建一个实例,我总是在盒子上放一个名字,如果没有,它默认会放“GetStorage”。 它需要有一个名称,以便它可以检索您的数据。
GetStorage getStorage = GetStorage('myData');
之后,您可以从中写入和检索数据,我建议您“等待”所有读取和写入。
await getStorage.write('XXX', 1);
var a = await getStorage.read('XXX');
print(a); /// 1
我建议您根据要存放的物品在盒子上写一个名称。
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 ...;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.