From 7e12f75defd8c295517acf35abd3365cd1a3ad3d Mon Sep 17 00:00:00 2001 From: Harsh Yadav Date: Sat, 20 Jun 2026 03:32:33 +0530 Subject: [PATCH] Migrate compass_app to SharedPreferencesAsync (#2841) ## Description Migrated `SharedPreferences` usage in `compass_app` to `SharedPreferencesAsync` to align with the latest `shared_preferences` recommendations. ### Changes made * Replaced `SharedPreferences.getInstance()` usages * Updated async preference reads with awaited getters * Migrated token persistence logic * Updated test setup preference clearing logic Fixes #2720 ## Pre-launch Checklist * [x] I read the [[Flutter Style Guide](https://github.com/flutter/flutter/blob/master/docs/contributing/Style-guide-for-Flutter-repo.md)] *recently*, and have followed its advice. * [x] I signed the [[CLA](https://cla.developers.google.com/)]. * [x] I read the [[Contributors Guide](https://github.com/flutter/samples/blob/main/CONTRIBUTING.md)]. * [ ] I have added sample code updates to the [[changelog](https://chatgpt.com/CHANGELOG.md)]. * [ ] I updated/added relevant documentation (doc comments with `///`). [Flutter Style Guide]: https://github.com/flutter/flutter/blob/master/docs/contributing/Style-guide-for-Flutter-repo.md [CLA]: https://cla.developers.google.com/ [Discord]: https://github.com/flutter/flutter/blob/master/docs/contributing/Chat.md [Contributors Guide]: https://github.com/flutter/samples/blob/main/CONTRIBUTING.md [changelog]: ../CHANGELOG.md Co-authored-by: Eric Windmill --- background_isolate_channels/lib/main.dart | 10 ++++++---- .../app/integration_test/app_server_data_test.dart | 2 +- .../data/services/shared_preferences_service.dart | 12 +++++++++--- 3 files changed, 16 insertions(+), 8 deletions(-) diff --git a/background_isolate_channels/lib/main.dart b/background_isolate_channels/lib/main.dart index a0c874e34..c929ee0b1 100644 --- a/background_isolate_channels/lib/main.dart +++ b/background_isolate_channels/lib/main.dart @@ -65,10 +65,12 @@ class _MyHomePageState extends State { // Write the value to [SharedPreferences] which will get read on the // [SimpleDatabase]'s isolate. For this example the value is always true // just for demonstration purposes. - final Future sharedPreferencesSet = SharedPreferences.getInstance() - .then( - (sharedPreferences) => sharedPreferences.setBool('isDebug', true), - ); + final SharedPreferencesAsync sharedPreferences = SharedPreferencesAsync(); + + final Future sharedPreferencesSet = sharedPreferences.setBool( + 'isDebug', + true, + ); final Future tempDirFuture = path_provider .getTemporaryDirectory(); diff --git a/compass_app/app/integration_test/app_server_data_test.dart b/compass_app/app/integration_test/app_server_data_test.dart index cb4bb28b7..c406c72ea 100644 --- a/compass_app/app/integration_test/app_server_data_test.dart +++ b/compass_app/app/integration_test/app_server_data_test.dart @@ -30,7 +30,7 @@ void main() { setUpAll(() async { // Clear any stored shared preferences - final sharedPreferences = await SharedPreferences.getInstance(); + final sharedPreferences = SharedPreferencesAsync(); await sharedPreferences.clear(); // Start the dart server diff --git a/compass_app/app/lib/data/services/shared_preferences_service.dart b/compass_app/app/lib/data/services/shared_preferences_service.dart index 24a67a9b5..09c34391f 100644 --- a/compass_app/app/lib/data/services/shared_preferences_service.dart +++ b/compass_app/app/lib/data/services/shared_preferences_service.dart @@ -13,9 +13,11 @@ class SharedPreferencesService { Future> fetchToken() async { try { - final sharedPreferences = await SharedPreferences.getInstance(); + final sharedPreferences = SharedPreferencesAsync(); + _log.finer('Got token from SharedPreferences'); - return Result.ok(sharedPreferences.getString(_tokenKey)); + + return Result.ok(await sharedPreferences.getString(_tokenKey)); } on Exception catch (e) { _log.warning('Failed to get token', e); return Result.error(e); @@ -24,14 +26,18 @@ class SharedPreferencesService { Future> saveToken(String? token) async { try { - final sharedPreferences = await SharedPreferences.getInstance(); + final sharedPreferences = SharedPreferencesAsync(); + if (token == null) { _log.finer('Removed token'); + await sharedPreferences.remove(_tokenKey); } else { _log.finer('Replaced token'); + await sharedPreferences.setString(_tokenKey, token); } + return const Result.ok(null); } on Exception catch (e) { _log.warning('Failed to set token', e);