GetStorage总是在flutter中返回null

qeeaahzv  于 2023-06-24  发布在  Flutter
关注(0)|答案(3)|浏览(191)

代码

print("Before : ${GetStorage().read("XXX")}");
    GetStorage().write("XXX", 1);
    print("After : ${GetStorage().read("XXX")}");

这是我的代码。每次运行应用程序时,输出为

之前:空
之后:1

为什么每次重启应用程序时存储数据都会被清除?我认为这是SharedPreference的替代方案,它工作得很好。我错过什么了吗?

tyky79it

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

我建议你根据你储存的东西在盒子上写上名字。

bq3bfh9z

bq3bfh9z2#

你应该等待GetStorage.init()

void main() async {
  await GetStorage.init();
  print("Before : ${GetStorage().read("XXX")}");
  GetStorage().write("XXX", 1);
  print("After : ${GetStorage().read("XXX")}");
}
raogr8fs

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 ...;
 }

相关问题