diff --git a/packages/supabase_flutter/lib/src/local_storage.dart b/packages/supabase_flutter/lib/src/local_storage.dart index d3622ea2..63b0ece0 100644 --- a/packages/supabase_flutter/lib/src/local_storage.dart +++ b/packages/supabase_flutter/lib/src/local_storage.dart @@ -61,14 +61,15 @@ class EmptyLocalStorage extends LocalStorage { Future persistSession(persistSessionString) async {} } -/// A [LocalStorage] implementation that implements SharedPreferences as the +/// A [LocalStorage] implementation that implements SharedPreferencesAsync as the /// storage method. class SharedPreferencesLocalStorage extends LocalStorage { - late final SharedPreferences _prefs; + late final SharedPreferencesAsync _prefs; SharedPreferencesLocalStorage({required this.persistSessionKey}); final String persistSessionKey; + static const _useWebLocalStorage = kIsWeb && bool.fromEnvironment("dart.library.js_interop"); @@ -76,7 +77,22 @@ class SharedPreferencesLocalStorage extends LocalStorage { Future initialize() async { if (!_useWebLocalStorage) { WidgetsFlutterBinding.ensureInitialized(); - _prefs = await SharedPreferences.getInstance(); + _prefs = SharedPreferencesAsync(); + + await _maybeMigrateAccessToken(); + } + } + + Future _maybeMigrateAccessToken() async { + final legacyPrefs = await SharedPreferences.getInstance(); + + if (legacyPrefs.containsKey(persistSessionKey)) { + final accessToken = legacyPrefs.getString(persistSessionKey); + + if (accessToken != null) { + await legacyPrefs.remove(persistSessionKey); + await _prefs.setString(persistSessionKey, accessToken); + } } } diff --git a/packages/supabase_flutter/pubspec.yaml b/packages/supabase_flutter/pubspec.yaml index 428d28f2..bb7ef9b2 100644 --- a/packages/supabase_flutter/pubspec.yaml +++ b/packages/supabase_flutter/pubspec.yaml @@ -6,8 +6,8 @@ repository: 'https://github.com/supabase/supabase-flutter/tree/main/packages/sup documentation: 'https://supabase.com/docs/reference/dart/introduction' environment: - sdk: '>=3.3.0 <4.0.0' - flutter: '>=3.19.0' + sdk: '>=3.4.0 <4.0.0' + flutter: '>=3.22.0' dependencies: app_links: '>=3.5.0 <7.0.0' @@ -20,7 +20,7 @@ dependencies: supabase: 2.7.0 url_launcher: ^6.1.2 path_provider: ^2.0.0 - shared_preferences: ^2.0.0 + shared_preferences: ^2.3.0 logging: ^1.2.0 web: '>=0.5.0 <2.0.0'