簡體   English   中英

GetStorage 始終在 flutter 中返回 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM