Skip to content

Commit b0dcd20

Browse files
committed
feat(supabase_flutter): Adds support for SharedPreferencesAsync
1 parent cc26ce5 commit b0dcd20

File tree

1 file changed

+36
-7
lines changed

1 file changed

+36
-7
lines changed

packages/supabase_flutter/lib/src/local_storage.dart

Lines changed: 36 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -64,19 +64,32 @@ class EmptyLocalStorage extends LocalStorage {
6464
/// A [LocalStorage] implementation that implements SharedPreferences as the
6565
/// storage method.
6666
class SharedPreferencesLocalStorage extends LocalStorage {
67-
late final SharedPreferences _prefs;
67+
late final SharedPreferences _syncPrefs;
68+
69+
late final SharedPreferencesAsync _asyncPrefs;
6870

69-
SharedPreferencesLocalStorage({required this.persistSessionKey});
71+
SharedPreferencesLocalStorage({
72+
required this.persistSessionKey,
73+
this.useSharedPreferencesAsync = false,
74+
});
7075

7176
final String persistSessionKey;
77+
78+
final bool useSharedPreferencesAsync;
79+
7280
static const _useWebLocalStorage =
7381
kIsWeb && bool.fromEnvironment("dart.library.js_interop");
7482

7583
@override
7684
Future<void> initialize() async {
7785
if (!_useWebLocalStorage) {
7886
WidgetsFlutterBinding.ensureInitialized();
79-
_prefs = await SharedPreferences.getInstance();
87+
88+
if (useSharedPreferencesAsync) {
89+
_asyncPrefs = SharedPreferencesAsync();
90+
} else {
91+
_syncPrefs = await SharedPreferences.getInstance();
92+
}
8093
}
8194
}
8295

@@ -85,23 +98,36 @@ class SharedPreferencesLocalStorage extends LocalStorage {
8598
if (_useWebLocalStorage) {
8699
return web.hasAccessToken(persistSessionKey);
87100
}
88-
return _prefs.containsKey(persistSessionKey);
101+
102+
return switch (useSharedPreferencesAsync) {
103+
true => _asyncPrefs.containsKey(persistSessionKey),
104+
false => Future.value(_syncPrefs.containsKey(persistSessionKey)),
105+
};
89106
}
90107

91108
@override
92109
Future<String?> accessToken() async {
93110
if (_useWebLocalStorage) {
94111
return web.accessToken(persistSessionKey);
95112
}
96-
return _prefs.getString(persistSessionKey);
113+
114+
return switch (useSharedPreferencesAsync) {
115+
true => _asyncPrefs.getString(persistSessionKey),
116+
false => Future.value(_syncPrefs.getString(persistSessionKey)),
117+
};
97118
}
98119

99120
@override
100121
Future<void> removePersistedSession() async {
101122
if (_useWebLocalStorage) {
102123
web.removePersistedSession(persistSessionKey);
103124
} else {
104-
await _prefs.remove(persistSessionKey);
125+
switch (useSharedPreferencesAsync) {
126+
case true:
127+
await _asyncPrefs.remove(persistSessionKey);
128+
case false:
129+
await _syncPrefs.remove(persistSessionKey);
130+
}
105131
}
106132
}
107133

@@ -110,7 +136,10 @@ class SharedPreferencesLocalStorage extends LocalStorage {
110136
if (_useWebLocalStorage) {
111137
return web.persistSession(persistSessionKey, persistSessionString);
112138
}
113-
return _prefs.setString(persistSessionKey, persistSessionString);
139+
return switch (useSharedPreferencesAsync) {
140+
true => _asyncPrefs.setString(persistSessionKey, persistSessionString),
141+
false => _syncPrefs.setString(persistSessionKey, persistSessionString),
142+
};
114143
}
115144
}
116145

0 commit comments

Comments
 (0)