SharedPreferences error in Flutter

10,769

Solution 1

I've tried shared_preferences: "0.2.4" and other versions suggested above without any success. Finally got it to work after changing flutter channel from dev to beta:

flutter channel beta

At least this fixes this problem for now and just wait for a fix for the shared_preferences plugin on the dev channel.

Solution 2

I solved this using the following workaround:

Future<SharedPreferences> prefs = SharedPreferences.getInstance();
prefs.then(
  (pref)
  {
    //call functions like pref.getInt(), etc. here
  }
);

Solution 3

To debug this, use the following:

Future<SharedPreferences> _sprefs = SharedPreferences.getInstance();
_sprefs.then((prefs) {
  // ...
}, 
onError: (error) {
  print("SharedPreferences ERROR = $error");   
});

In my case the error was that I wanted to call await SharedPreferences.getInstance() before I called runApp(), so that solution the error message gave me was to order my code as follows:

First:

WidgetsFlutterBinding.ensureInitialized();

Afterwards:

SharedPreferences prefs = await SharedPreferences.getInstance();

Finally:

runApp(...);

Solution 4

I fixed it by changing to shared_preferences: "0.3.3". There is a good chance this breaks again.

Share:
10,769
Tony Danilov
Author by

Tony Danilov

I like drinking coffee from Java in a jar.

Updated on June 07, 2022

Comments

  • Tony Danilov
    Tony Danilov almost 2 years

    I was using shared_preferences plugin in my Flutter application. From one moment (probably after Flutter upgrade), it started to throw an exception:

    E/flutter (27778): [ERROR:topaz/lib/tonic/logging/dart_error.cc(16)] Unhandled exception:
    E/flutter (27778): type '_InternalLinkedHashMap' is not a subtype of type 'Map<String, Object>' where
    E/flutter (27778):   _InternalLinkedHashMap is from dart:collection
    E/flutter (27778):   Map is from dart:core
    E/flutter (27778):   String is from dart:core
    E/flutter (27778):   Object is from dart:core
    E/flutter (27778): 
    E/flutter (27778): #0      SharedPreferences.getInstance (package:shared_preferences/shared_preferences.dart)
    E/flutter (27778): <asynchronous suspension>
    E/flutter (27778): #1      loadFirstUse (**path**/lib/main.dart:29:53)
    E/flutter (27778): <asynchronous suspension>
    E/flutter (27778): #2      main (**path**/lib/main.dart:17:9)
    E/flutter (27778): <asynchronous suspension>
    E/flutter (27778): #3      _startIsolate.<anonymous closure> (dart:isolate/runtime/libisolate_patch.dart:279:19)
    E/flutter (27778): #4      _RawReceivePortImpl._handleMessage (dart:isolate/runtime/libisolate_patch.dart:165:12)
    

    It happens when I simple try to create instance of SharedPreferences:

    SharedPreferences prefs = await SharedPreferences.getInstance();
    

    I was trying to find root of the problem, but was unable to find it. Thank you for any help.

    EDIT: I am using shared_preferences: "^0.4.0"

  • A.W.
    A.W. almost 6 years
    I tried this but get the message git: Already on 'beta' and I am already using 0.2.4 Still get the same error.
  • A.W.
    A.W. almost 6 years
    I still get the same error after changing to 0.3.3
  • oreid
    oreid almost 6 years
    @Guus, yeah, not exactly sure why the fix worked for us. We ended up switching our entire state management to Redux. If you want to continue using shared_preferences, maybe try some other version numbers to see if they fix the issue. Sorry I can't give you a better answer.
  • Graham Laight
    Graham Laight almost 6 years
    Need a more complete example. Can you show code to get a preference, please?