@@ -64,19 +64,32 @@ class EmptyLocalStorage extends LocalStorage {
6464/// A [LocalStorage] implementation that implements SharedPreferences as the
6565/// storage method.
6666class 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