Flutter错误:无法将类型'Future <bool>'的值分配给'bool'类型的变量

时间:2020-06-16 14:05:32

标签: flutter sharedpreferences

我正在尝试从shared preferences中读取内容,但被卡住了。我遇到了这个错误,而且我不知道如何处理: A value of type 'Future<bool>' 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;
  }

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

2 个答案:

答案 0 :(得分:1)

您必须使用await函数_getPref(),因为它会返回将来的Future<bool>

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

答案 1 :(得分:0)

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

  1. 使用async-await

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

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