您可以使用以下非常简单的类来获取没有await 的SharedPreferences 实例:
import 'package:shared_preferences/shared_preferences.dart';
class SharedPrefs {
static late final SharedPreferences instance;
static Future<SharedPreferences> init() async =>
instance = await SharedPreferences.getInstance();
}
- 可能在
main()函数中初始化instance,如下:
void main() async {
// Required for async calls in `main`
WidgetsFlutterBinding.ensureInitialized();
// Initialize SharedPrefs instance.
await SharedPrefs.init();
runApp(MyApp());
}
-
SharedPrefs.instance 上的访问方法,例如:
final someString = SharedPrefs.instance.getString('someString') ?? 'defaultValue';
await SharedPrefs.instance.setBool('someBool', true);
额外:
如果愿意,可以通过重新定义这些方法(getBool、setString 等)或在SharedPrefs 类本身中定义新方法(getUser、setUser、setAccessToken 等)来进一步抽象并制作instance 像 _instance 这样的私有字段。
一个这样的例子如下:
// Getter
static bool? getBool(String key) => _instance.getBool(key);
// Setter
static Future<bool> setBool(String key, bool value) => _instance.setBool(key, value);
// More abstraction
static const _kAccessToken = 'accessToken';
static Future<bool> setAccessToken(String value) => _instance.setString(_kAccessToken, value);
static String? getAccessToken() => _instance.getString(_kAccessToken);
之后,就可以简单的调用这些方法了,如下:
final someBool = SharedPrefs.getBool('someBool') ?? false;
await SharedPrefs.setBool('someBool', someBool);
final accessToken = SharedPrefs.getAccessToken();