问题描述
我的代码没有问题,它完美无缺,所以如果您不想浪费时间,请不要阅读。
我只是想从更有经验的人那里知道,你认为什么是更好的做法,所以事情是这样的:
_initPrefs() async {
if (prefs == null) prefs = await SharedPreferences.getInstance();
}
setSoundEnabled(bool value) async {
await _initPrefs();
print('setSoundEnabled($value)');
prefs.setBool(SharedPrefsKeys.soundEnabledKey,value);
}
//First alternative
Future<bool> isSoundEnabled() async {
await _initPrefs();
bool value = prefs.getBool(SharedPrefsKeys.soundEnabledKey) ?? true;
print('isSoundEnabled(): $value');
return value;
}
//Second alternative
Future<bool> isSoundEnabledAlternative() async {
await _initPrefs();
bool value = prefs.getBool(SharedPrefsKeys.soundEnabledKey);
if (value == null) {
value = true;
setSoundEnabled(value); //no need to await this
}
print('isSoundEnabled(): $value');
return value;
}
这是我的一些应用设置代码,更具体地说是关于是否应该在应用中启用声音。
第一种选择:
如果 soundEnabledKey
没有值,我只返回默认常量值 true
(不将其存储在共享首选项中)。
这意味着,如果用户从不更改此设置,则不会为 soundEnabledKey
存储任何值,并且该方法将始终返回该常量 true
。
第二种选择:
如果 soundEnabledKey
没有值,我首先保存该键的默认值 true
,然后返回该值。
这意味着,无论用户是否更改此设置,第一次调用此方法时,应用程序都会在共享首选项中存储 soundEnabledKey
的值,并且所有后续调用都将检索来自共享偏好的价值。
解决方法
我认为方案1更好,每个方法只有一个职责,因此关闭修改。
但是为了一致性,您可以在任何添加业务初始化代码的地方初始化 soundEnabled 值