Skip to content

Commit a50d74e

Browse files
committed
refactor: Split SharedPreferencesLocalStorage in two ditinct classes : SharedPreferencesLocalStorage & SharedPreferencesAsyncLocalStorage
1 parent c729acc commit a50d74e

File tree

1 file changed

+60
-34
lines changed

1 file changed

+60
-34
lines changed

packages/supabase_flutter/lib/src/local_storage.dart

Lines changed: 60 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -64,32 +64,20 @@ 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 _syncPrefs;
68-
69-
late final SharedPreferencesAsync _asyncPrefs;
67+
late final SharedPreferences _prefs;
7068

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

7671
final String persistSessionKey;
7772

78-
final bool useSharedPreferencesAsync;
79-
8073
static const _useWebLocalStorage =
8174
kIsWeb && bool.fromEnvironment("dart.library.js_interop");
8275

8376
@override
8477
Future<void> initialize() async {
8578
if (!_useWebLocalStorage) {
8679
WidgetsFlutterBinding.ensureInitialized();
87-
88-
if (useSharedPreferencesAsync) {
89-
_asyncPrefs = SharedPreferencesAsync();
90-
} else {
91-
_syncPrefs = await SharedPreferences.getInstance();
92-
}
80+
_prefs = await SharedPreferences.getInstance();
9381
}
9482
}
9583

@@ -98,36 +86,77 @@ class SharedPreferencesLocalStorage extends LocalStorage {
9886
if (_useWebLocalStorage) {
9987
return web.hasAccessToken(persistSessionKey);
10088
}
101-
102-
return switch (useSharedPreferencesAsync) {
103-
true => _asyncPrefs.containsKey(persistSessionKey),
104-
false => Future.value(_syncPrefs.containsKey(persistSessionKey)),
105-
};
89+
return _prefs.containsKey(persistSessionKey);
10690
}
10791

10892
@override
10993
Future<String?> accessToken() async {
11094
if (_useWebLocalStorage) {
11195
return web.accessToken(persistSessionKey);
11296
}
97+
return _prefs.getString(persistSessionKey);
98+
}
99+
100+
@override
101+
Future<void> removePersistedSession() async {
102+
if (_useWebLocalStorage) {
103+
web.removePersistedSession(persistSessionKey);
104+
} else {
105+
await _prefs.remove(persistSessionKey);
106+
}
107+
}
108+
109+
@override
110+
Future<void> persistSession(String persistSessionString) {
111+
if (_useWebLocalStorage) {
112+
return web.persistSession(persistSessionKey, persistSessionString);
113+
}
114+
return _prefs.setString(persistSessionKey, persistSessionString);
115+
}
116+
}
117+
118+
/// A [LocalStorage] implementation that implements SharedPreferencesAsync as the
119+
/// storage method.
120+
class SharedPreferencesAsyncLocalStorage extends LocalStorage {
121+
late final SharedPreferencesAsync _prefs;
122+
123+
SharedPreferencesAsyncLocalStorage({required this.persistSessionKey});
113124

114-
return switch (useSharedPreferencesAsync) {
115-
true => _asyncPrefs.getString(persistSessionKey),
116-
false => Future.value(_syncPrefs.getString(persistSessionKey)),
117-
};
125+
final String persistSessionKey;
126+
127+
static const _useWebLocalStorage =
128+
kIsWeb && bool.fromEnvironment("dart.library.js_interop");
129+
130+
@override
131+
Future<void> initialize() async {
132+
if (!_useWebLocalStorage) {
133+
WidgetsFlutterBinding.ensureInitialized();
134+
_prefs = SharedPreferencesAsync();
135+
}
136+
}
137+
138+
@override
139+
Future<bool> hasAccessToken() async {
140+
if (_useWebLocalStorage) {
141+
return web.hasAccessToken(persistSessionKey);
142+
}
143+
return _prefs.containsKey(persistSessionKey);
144+
}
145+
146+
@override
147+
Future<String?> accessToken() async {
148+
if (_useWebLocalStorage) {
149+
return web.accessToken(persistSessionKey);
150+
}
151+
return _prefs.getString(persistSessionKey);
118152
}
119153

120154
@override
121155
Future<void> removePersistedSession() async {
122156
if (_useWebLocalStorage) {
123157
web.removePersistedSession(persistSessionKey);
124158
} else {
125-
switch (useSharedPreferencesAsync) {
126-
case true:
127-
await _asyncPrefs.remove(persistSessionKey);
128-
case false:
129-
await _syncPrefs.remove(persistSessionKey);
130-
}
159+
await _prefs.remove(persistSessionKey);
131160
}
132161
}
133162

@@ -136,10 +165,7 @@ class SharedPreferencesLocalStorage extends LocalStorage {
136165
if (_useWebLocalStorage) {
137166
return web.persistSession(persistSessionKey, persistSessionString);
138167
}
139-
return switch (useSharedPreferencesAsync) {
140-
true => _asyncPrefs.setString(persistSessionKey, persistSessionString),
141-
false => _syncPrefs.setString(persistSessionKey, persistSessionString),
142-
};
168+
return _prefs.setString(persistSessionKey, persistSessionString);
143169
}
144170
}
145171

0 commit comments

Comments
 (0)