In my flutter application I have implemented a an onboarding view. As it should load only once, I have used shared preferences to store an integer to indicate that onboarding is already shown. When I run the application in debug mode everything works perfectly. But when I build the release version of it, it doesn’t work.
And also my application uses firebase mobile authentication. I am mentioning this since it may be a reason as well.
The code:
case InitializeEvent:
SharedPreferences prefs = await SharedPreferences.getInstance();
int initScreen = prefs.getInt(SharedPrefUtil.INIT_SCREEN);
await prefs.setInt(SharedPrefUtil.INIT_SCREEN, 1);
if (initScreen == 1) {
add(CheckAppConfigEvent());
} else {
yield state.clone(page: RootState.ONBOARDING_PAGE);
}
yield state.clone(loading: false);
break;
So in the above code, if I comment initializing shared pref, reading and writing lines and set true or false in if else statement everything works fine in release build. That’s why I think the issue is in initializing shared preferences.
And also I have given permission only for internet. Am I missing any permission in AndroidManifest.xml
<uses-permission android:name="android.permission.INTERNET"/>
My app was also not working in the release build and the issue is due to the shared_preferences package.
I'm getting the following error in the release build:
MissingPluginException(No implementation found for method getAll on channel plugins.flutter.io/shared_preferences)
I tried several solutions:
but nothing worked.
The app worked fine in the debug build but not in the release build.
Then I tried
flutter build apk --no-shrink
flutter build appbundle --no-shrink
and the app worked fine in the release build as well. But the issue is resolved without shrinking the code. So this needs to be fixed.
Hopefully, the Flutter team will look into the issue and will resolve that.
Edit:
Already reported the issue to the Flutter team.
https://github.com/flutter/flutter/issues/65334