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();
我有一个 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();