fluttersharedpreferencesflutter-getxflutter-stateflutter-sharedpreference

Getx Storage return null whenever app starts


I have initilized GetStorage() in main() and calling .read() in onReady dunction of GetX Controller but always get null!

Future<void> main() async {
  await GetStorage.init();
  runApp(const App());
}
class AuthenticationRepository extends GetxController {
  static AuthenticationRepository get instance => Get.find();

  /// Variables
  GetStorage userStorage = GetStorage('User');

  @override
  void onReady() {
    // Firebase User
    firebaseUser = Rx<User?>(_auth.currentUser);
    firebaseUser.bindStream(_auth.userChanges());

    //Session
    print('========= BEFORE -- ${userStorage.read('isFirstTime')} ===========');
    userStorage.writeIfNull('isFirstTime', 'true');
    print('========= AFTER -- ${userStorage.read('isFirstTime')} ============');    
  }

OUTPUT

================== BEFORE -- null ======================== ================== AFTER -- true =========================

I have tried named values also like GetStorage('User'); nothing worked.


Solution

  • You will need to give the container name in init if you are using a custom container name.

    So, you have two solutions

    1 -> Update your init to this

    Future<void> main() async {
      await GetStorage.init('User');  // <- add your custom Container name 'User'
      runApp(const App());
    }
    

    OR

    2 Don't use a custom container name and GetStorage uses it's default container name. In this case, update your code while declaring GetStorage object to read and write data

    class AuthenticationRepository extends GetxController {
      static AuthenticationRepository get instance => Get.find();
    
      /// Variables
      GetStorage userStorage = GetStorage(); //<- remove custom container name 'User'
    
      @override
      void onReady() {
        // Firebase User
        firebaseUser = Rx<User?>(_auth.currentUser);
        firebaseUser.bindStream(_auth.userChanges());
    //Session
    print('========= BEFORE -- ${userStorage.read('isFirstTime')} ===========');
    userStorage.writeIfNull('isFirstTime', 'true');
    print('========= AFTER -- ${userStorage.read('isFirstTime')} ============');    
    

    }