android - 如何创建一个共享首选项的单个实例,它可以在 flutter 的整个项目中使用

标签 android flutter dart sharedpreferences single-instance

每当我们必须使用共享首选项时,我们都必须创建它的一个实例。
在 flutter 中创建共享偏好的实例是异步的;final prefs = await SharedPreferences.getInstance();每当我们必须像上面那样使用它时,我们都必须始终创建它的实例。
有没有办法创建一个共享首选项的单个实例,该实例可供整个项目使用,而我们不必在 Flutter 中一次又一次地创建它的实例?

最佳答案

创建 SharedPreference 的单例类:
把这个类放在项目中

       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);
         }
       }
在 initState() 主类中初始化这个类
 void main() async {
  // Required for async calls in `main`
  WidgetsFlutterBinding.ensureInitialized();

  // Initialize SharedPrefs instance.
  await SharedPrefs.init();

  runApp(MyApp());
}
方法中的访问
PreferenceUtils.setString(AppConstants.USER_ID, "");
String userId = PreferenceUtils.getString(AppConstants.USER_ID);
更多:https://dev.to/lucianojung/flutter-singelton-pattern-1a38

关于android - 如何创建一个共享首选项的单个实例,它可以在 flutter 的整个项目中使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73046331/

相关文章:

flutter - 依赖注入(inject)问题并在 Flutter 中获取它

flutter - 字符串列表不会在setState上更新

android - NullPointerException 由于尝试在空对象引用上调用虚拟方法 'android.os.IBinder android.view.SurfaceControl.getHandle()'

android - 我如何从这个 JSON 中获取国家、州和城市的列表?

java - libGDXcamera.unproject() 返回 NaN

image - pubspec.yaml : Expected a key while parsing a block mapping. Assets 第 40 行第 4 列出错:^

dart - 'pub get'给出了Angular2软件包的错误

android - 为什么 Android SDK Manager 中的 Google Play Services 版本与 gradle 文件中所需的版本不同?

flutter 在2个标记之间绘制路线

firebase - 如何从Firebase flutter 播放音频文件?