San*_*inh 5 android ios flutter flutter-layout
总是需要的对象,SharedPreferences但我们使用awaitLike访问 。
await SharedPreferences.getInstance();
这就是为什么我认为SharedPreferences 在 SharedPreferences 中创建 Singleton 类并为 GET & SET 数据创建静态方法。
但我不知道该怎么做,我尝试但无法成功
请帮助我
rma*_*iya 19
您可以使用以下非常简单的类来获取SharedPreferences实例,而无需await:
import 'package:shared_preferences/shared_preferences.dart';
class SharedPrefs {
static late final SharedPreferences instance;
static Future<SharedPreferences> init() async =>
instance = await SharedPreferences.getInstance();
}
Run Code Online (Sandbox Code Playgroud)
instancemay inmain()函数,如下:void main() async {
// Required for async calls in `main`
WidgetsFlutterBinding.ensureInitialized();
// Initialize SharedPrefs instance.
await SharedPrefs.init();
runApp(MyApp());
}
Run Code Online (Sandbox Code Playgroud)
SharedPrefs.instance,例如:final someString = SharedPrefs.instance.getString('someString') ?? 'defaultValue';
await SharedPrefs.instance.setBool('someBool', true);
Run Code Online (Sandbox Code Playgroud)
额外:
如果愿意,可以通过重新定义这些方法(getBool、等)或在类本身中setString定义新方法(getUser、setUser等setAccessToken)并创建一个像.SharedPrefsinstance_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);
Run Code Online (Sandbox Code Playgroud)
之后,我们可以简单地调用这些方法,如下所示:
final someBool = SharedPrefs.getBool('someBool') ?? false;
await SharedPrefs.setBool('someBool', someBool);
final accessToken = SharedPrefs.getAccessToken();
Run Code Online (Sandbox Code Playgroud)
San*_*inh 10
对于处理单例类,请SharedPreference遵循 3 个步骤 -
1. 把这个类放到你的项目中
import 'dart:async' show Future;
import 'package:shared_preferences/shared_preferences.dart';
class PreferenceUtils {
static Future<SharedPreferences> get _instance async => _prefsInstance ??= await SharedPreferences.getInstance();
static SharedPreferences _prefsInstance;
// call this method from iniState() function of mainApp().
static Future<SharedPreferences> init() async {
_prefsInstance = await _instance;
return _prefsInstance;
}
static String getString(String key, [String defValue]) {
return _prefsInstance.getString(key) ?? defValue ?? "";
}
static Future<bool> setString(String key, String value) async {
var prefs = await _instance;
return prefs?.setString(key, value) ?? Future.value(false);
}
}
Run Code Online (Sandbox Code Playgroud)
2. 从你的主类的 initState() 初始化这个类
PreferenceUtils.init();
Run Code Online (Sandbox Code Playgroud)
3.访问您的方法,例如
PreferenceUtils.setString(AppConstants.USER_NAME, "");
String username = PreferenceUtils.getString(AppConstants.USER_NAME);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4465 次 |
| 最近记录: |