Ognjen Regoje bio photo

MY NAME IS
Ognjen Regoje
BUT YOU CAN CALL ME OGGY


I make things that run on the web (mostly).

More /ABOUT me.

And about /PROJECTS I've been involved in.

Email me at me@ognjen.io

me@ognjen.io Twitter LinkedIn Instagram Github

Flutter: Using SharedPreferences in Flutter and native

Been experimenting with Flutter recently and had a use case where I wanted to access SharedPrefernces in Flutter and in native. Surprisingly it was a bit tricky and took a bit of digging.

To use SharedPreferences in Flutter the shared_preferences package is required and you use them like this:

SharedPreferences prefs = await SharedPreferences.getInstance();
var prefsStartTime = prefs.getString('startTime');

In Java, you’d do it like this:

SharedPreferences sharedPref = context.getSharedPreferences("", Context.MODE_PRIVATE);
String startTime = sharedPref.getString("startTime", "");

However, due to the way that the Flutter plugin is implemented this doesn’t give you the same value.

First, from here we can see that the SHARED_PREFERENCES_NAME is set to FlutterSharedPreferences. So, to access the same set of preferences we must use the same name.

SharedPreferences sharedPref = context.getSharedPreferences("FlutterSharedPreferences", Context.MODE_PRIVATE);

Secondly, the name of the preference itself, in this case startTime, is also incorrect.

Looking at this we can see that the plugin prepends flutter. to all the preference names. So, the correct way to access the preference is:

String startTime = sharedPref.getString("flutter.startTime", "");

And that finally allows us to read preferences in Flutter and Java consistently.

Hope this saves someone some Googling and source-code reading.