Flutter:默认值的好做法是什么关于 shared_preferences

问题描述

我的代码没有问题,它完美无缺,所以如果您不想浪费时间,请不要阅读。

我只是想从更有经验的人那里知道,你认为什么是更好的做法,所以事情是这样的:

  _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 值