SharedPreferences error in Flutter
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.
Comments
-
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. almost 6 yearsI tried this but get the message
git: Already on 'beta'
and I am already using0.2.4
Still get the same error. -
A.W. almost 6 yearsI still get the same error after changing to
0.3.3
-
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 almost 6 yearsNeed a more complete example. Can you show code to get a preference, please?