@@ -64,19 +64,32 @@ class EmptyLocalStorage extends LocalStorage {
64
64
/// A [LocalStorage] implementation that implements SharedPreferences as the
65
65
/// storage method.
66
66
class SharedPreferencesLocalStorage extends LocalStorage {
67
- late final SharedPreferences _prefs;
67
+ late final SharedPreferences _syncPrefs;
68
+
69
+ late final SharedPreferencesAsync _asyncPrefs;
68
70
69
- SharedPreferencesLocalStorage ({required this .persistSessionKey});
71
+ SharedPreferencesLocalStorage ({
72
+ required this .persistSessionKey,
73
+ this .useSharedPreferencesAsync = false ,
74
+ });
70
75
71
76
final String persistSessionKey;
77
+
78
+ final bool useSharedPreferencesAsync;
79
+
72
80
static const _useWebLocalStorage =
73
81
kIsWeb && bool .fromEnvironment ("dart.library.js_interop" );
74
82
75
83
@override
76
84
Future <void > initialize () async {
77
85
if (! _useWebLocalStorage) {
78
86
WidgetsFlutterBinding .ensureInitialized ();
79
- _prefs = await SharedPreferences .getInstance ();
87
+
88
+ if (useSharedPreferencesAsync) {
89
+ _asyncPrefs = SharedPreferencesAsync ();
90
+ } else {
91
+ _syncPrefs = await SharedPreferences .getInstance ();
92
+ }
80
93
}
81
94
}
82
95
@@ -85,23 +98,36 @@ class SharedPreferencesLocalStorage extends LocalStorage {
85
98
if (_useWebLocalStorage) {
86
99
return web.hasAccessToken (persistSessionKey);
87
100
}
88
- return _prefs.containsKey (persistSessionKey);
101
+
102
+ return switch (useSharedPreferencesAsync) {
103
+ true => _asyncPrefs.containsKey (persistSessionKey),
104
+ false => Future .value (_syncPrefs.containsKey (persistSessionKey)),
105
+ };
89
106
}
90
107
91
108
@override
92
109
Future <String ?> accessToken () async {
93
110
if (_useWebLocalStorage) {
94
111
return web.accessToken (persistSessionKey);
95
112
}
96
- return _prefs.getString (persistSessionKey);
113
+
114
+ return switch (useSharedPreferencesAsync) {
115
+ true => _asyncPrefs.getString (persistSessionKey),
116
+ false => Future .value (_syncPrefs.getString (persistSessionKey)),
117
+ };
97
118
}
98
119
99
120
@override
100
121
Future <void > removePersistedSession () async {
101
122
if (_useWebLocalStorage) {
102
123
web.removePersistedSession (persistSessionKey);
103
124
} 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
+ }
105
131
}
106
132
}
107
133
@@ -110,7 +136,10 @@ class SharedPreferencesLocalStorage extends LocalStorage {
110
136
if (_useWebLocalStorage) {
111
137
return web.persistSession (persistSessionKey, persistSessionString);
112
138
}
113
- return _prefs.setString (persistSessionKey, persistSessionString);
139
+ return switch (useSharedPreferencesAsync) {
140
+ true => _asyncPrefs.setString (persistSessionKey, persistSessionString),
141
+ false => _syncPrefs.setString (persistSessionKey, persistSessionString),
142
+ };
114
143
}
115
144
}
116
145
0 commit comments