I am trying to use the shared_preferences 2.0.15 Flutter package to create an autologin feature in my app. In Android, when the app is running in debug mode everything is working fine but as soon as the app is released to Google Play Store the autologin feature doesn't work anymore. I haven't tested it on iOS just yet..
I've tried building the release using flutter build appbundle --release --no-shrink as suggested on other older threads found on Google. But this doesn't fix the issue when uploaded to Google Play Store.
I am loading the shared preferences instance through a singleton class instantiated in my main function:
Main function:
Future<void> main() async {
WidgetsFlutterBinding.ensureInitialized();
await PrefsSingleton().init();
...
Singleton:
import 'package:shared_preferences/shared_preferences.dart';
import 'dart:convert';
class PrefsSingleton {
static final PrefsSingleton _instance = PrefsSingleton._internal();
late final SharedPreferences _prefs;
factory PrefsSingleton() {
return _instance;
}
PrefsSingleton._internal();
Future<SharedPreferences> init() async => _prefs = await SharedPreferences.getInstance();
Future<bool> setBool(String key, bool value) => _prefs.setBool(key, value);
bool? getBool(String key) => _prefs.getBool(key);
Future<bool> setString(String key, String value) => _prefs.setString(key, value);
String? getString(String key) => _prefs.getString(key);
Future<bool> setJsonEncodedString(String key, dynamic value) => _prefs.setString(key, json.encode(value));
dynamic getJsonDecodedString(String key) {
var jsonString = _prefs.getString(key);
if (jsonString != null) {
return jsonDecode(jsonString);
}
return null;
}
}
Where I am doing the autologin:
class AutoLogin implements StartupTask {
@override
Future<dynamic> runTask() async {
var alreadyLoggedIn = PrefsSingleton().getBool("user.isLoggedIn") ?? false;
if (alreadyLoggedIn) {
var domain = PrefsSingleton().getString("user.domain");
var pincode = PrefsSingleton().getString("user.pincode");
await PrefsSingleton().setBool("user.isLoggedIn", false);
if (domain != null && pincode != null) {
var loggedIn = await ApiUserRepo().loginUser(domain, pincode);
if (loggedIn) {
await PluginSyncRepo().getSyncData();
}
}
}
}
}
Has anyone experienced similar issues and found a solution? Could this maybe have something to do with the fact that I am using a prerelease of flutter_riverpod 2.0.0-dev.9?
------- Info -------
- Flutter version: 3.0.5
- Dart version: 2.17.6
- Build gradle version: 7.0.0
------- Installed packages -------
cupertino_icons: ^1.0.2 flutter_riverpod: ^2.0.0-dev.9 device_info_plus: ^4.0.0 percent_indicator: ^4.2.2 pin_code_fields: ^7.4.0 flutter_spinkit: ^5.1.0 url_launcher: ^6.1.0 rest_client: ^2.1.4 crypto: ^3.0.2 catcher: ^0.7.0 shared_preferences: ^2.0.15 uuid: ^3.0.6 flutter_facebook_auth: ^4.3.4 intl: ^0.17.0 image_picker: ^0.8.5+3 connectivity_plus: ^2.3.2 json_annotation: ^4.5.0 reorderables: ^0.5.0 cached_network_image: ^3.2.1 string_validator: ^0.3.0 image: ^3.2.0 heic_to_jpg: ^0.2.0 path_provider: ^2.0.11 package_info_plus: ^1.4.2 camera: ^0.10.0+1 dropdown_button2: ^1.7.2