【问题标题】:Flutter Error: A value of type 'Future<bool>' can't be assigned to a variable of type 'bool'Flutter 错误:“Future<bool>”类型的值不能分配给“bool”类型的变量
【发布时间】:2020-06-16 14:05:32
【问题描述】:

我正在尝试阅读 shared preferences 的内容,但我被卡住了。我有这个错误,我不知道如何处理它: A value of type 'Future&lt;bool&gt;' can't be assigned to a variable of type 'bool'

我的代码如下所示:

onTap: () {
        setState(() {
          if (_getPref()) {       //here occurs the error
            _stateColor = _disableColor;
            _setPref(false);
          } else {
            _stateColor = _enableColor;
            _setPref(true);
          }
        });
      },

以及方法:

Future<bool> _getPref() async {
    SharedPreferences prefs = await SharedPreferences.getInstance();
    bool value = prefs.getBool(widget.myIndex) ?? false;
    return value;
  }

如果有人能帮助我,我将不胜感激!

【问题讨论】:

  • if 条件需要一个 bool 值,但 _getPref 是一个 Future,使 setState 主体异步和 if(await _getPref)

标签: flutter sharedpreferences


【解决方案1】:

你必须await_getPref()函数,因为它返回一个未来Future&lt;bool&gt;

onTap: () async {
    if (await _getPref()) {       //here occurs the error
      _stateColor = _disableColor;
      _setPref(false);
    } else {
      _stateColor = _enableColor;
      _setPref(true);
    }
    setState(() {});
  },

【讨论】:

    【解决方案2】:

    有两种方法,你可以做到。

    1. 使用async-await:

      void func() async {
        bool value = await _getPref();
        setState(() {
          _value = value;
        });
      }
      
    2. 使用then

      void func() {
        _getPref().then((value) {
          setState(() {
            _value = value;
          });
        });
      }
      

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-11-24
      • 2021-11-19
      • 1970-01-01
      • 2021-10-16
      • 2021-10-10
      • 2020-08-23
      • 2021-04-07
      • 2021-07-06
      相关资源
      最近更新 更多