Flutter - 在 class 中创建共享首选项实例

Flutter - create Instance of Shared Preferences in class

我有一个 class 叫做 ThemeUtil

import 'package:shared_preferences/shared_preferences.dart';

class ThemeUtil {
  SharedPreferences prefs;
  bool initialized = false;
  ThemeUtil() {
    SharedPreferences.getInstance().then((val) {
      prefs = val;
      initialized = true;
    });
  }

  bool getBrightness() {
    if (initialized) {
      try {
        return prefs.getBool("dark") ?? false;
      } catch (error) {
        return false;
      }
    } else {
      return null;
    }
  }

  setBrightness(bool _dark) {
    try {
      prefs.setBool("dark", _dark);
    } catch (error) {
      return;
    }
  }
}

但我的问题是,当我在 main.dart 中使用它时,它总是 returns false,这导致白色主题,因为尚未创建 ThemeUtil 中的共享首选项。有谁知道如何解决这个问题?

您遇到的问题称为访问 class 实例。每次访问您的实用程序 class 时,您都在创建另一个 class 实例 class,在它的构造函数中,您不断地异步生成新的 SharedPreferences 实例。这就是为什么你总是得到错误的价值观。我的建议是创建单例 Utils class,您始终可以在其中访问已分配的首选项。

class LocalStorage {
  static final LocalStorage _instance = LocalStorage._privateConstructor();
  factory LocalStorage() {
    return _instance;
  }
  SharedPreferences _prefs;

  LocalStorage._privateConstructor() {
    SharedPreferences.getInstance().then((prefs) {
      _prefs = prefs;
    });
  }
}

现在请确保在应用启动时初始化此单例:

void main() {
  LocalStorage();
  runApp(MyApp());
}

初始创建 SharedPreferences 对象后,您可以通过调用在应用程序的任何位置同步访问它的内容:

LocalStorage().getBrightness();