1

I have implemented SharedPreference in Flutter using the following dependency:

 shared_preferences: ^0.5.12+4

My Preference class :

class Preference {
  static Future<SharedPreferences> _prefs = SharedPreferences.getInstance();

  static saveLoginInfo(VerifyUserLoginResult verifyUserLoginResult) async {
    SharedPreferences pref = await _prefs;
    pref
        .setString("user_login", jsonEncode(verifyUserLoginResult))
        .then((value) => print('User Login Value Saved : $value'));
  }

  static Future<bool> isLoggedIn() async {
    SharedPreferences pref = await _prefs;
    print('is Logged In : ${pref.getString("user_login")}');
    return pref.getString("user_login") != null;
  }
}

My logs as follow:

I/flutter (28468): User Login Value Saved : true
I/flutter (28468): is Logged In null
I/flutter (28468): is Logged In: false

Can anyone help me to save the JSON in Preference? I also want to check whether JSON is saved or not to display another screen if already logged in.

Edit:

I have called the method to save String as below:

  if (value.verifyUserLoginResult.mID == '1')
  {
    Preference.saveLoginInfo(value.verifyUserLoginResult),
    Navigator.of(context).pushReplacement(MaterialPageRoute(builder: (context) => Dashboard()))
  }
Pratik Butani
  • 60,504
  • 58
  • 273
  • 437

2 Answers2

1

Because you are not adding await before calling saveLoginInfo method. and sharedpreferences save method returns "future"

You need to add await before calling saveLoginInfo

your code should be :

await  Preference.saveLoginInfo(value.verifyUserLoginResult),
Hardy
  • 2,576
  • 1
  • 23
  • 45
  • I have tried to add the `await` before calling method but I couldn't able to do it. you can check my edited question. It's giving me a warning. – Pratik Butani Nov 19 '20 at 13:30
0

How are you calling Preference.isLoggedIn()? Maybe you are not awaiting the result?

I have reproduced your code with a test case and evertyhing worked as expected.

Preferences.dart

import 'dart:convert';

import 'package:shared_preferences/shared_preferences.dart';

class Preference {
  static Future<SharedPreferences> _prefs = SharedPreferences.getInstance();

  static saveLoginInfo(dynamic verifyUserLoginResult) async {
    SharedPreferences pref = await _prefs;
    pref
        .setString("user_login", jsonEncode(verifyUserLoginResult))
        .then((value) => print('User Login Value Saved : $value'));
  }

  static Future<bool> isLoggedIn() async {
    SharedPreferences pref = await _prefs;
    return pref.getString("user_login") != null;
  }
}

preferences_test.dart

import 'package:flutter_apph/Preferences.dart';
import 'package:flutter_test/flutter_test.dart';

void main(){
  test('sharedprefs',() async {
    Map<String,Map<String,String>> value = {
      "verifyUserLoginResult" : {
        "mID" : "1"
      }
    };
    if (value['verifyUserLoginResult']['mID'] == '1')
    {
      await Preference.saveLoginInfo(value['verifyUserLoginResult']);
      expect(
        await Preference.isLoggedIn(),
        true);
    }
  });
}
Ricardo Gonçalves
  • 4,344
  • 2
  • 20
  • 30