Flutter 类型';未来<;动态>';不是类型为';布尔';共享的\u首选项

Flutter 类型';未来<;动态>';不是类型为';布尔';共享的\u首选项,flutter,dart,sharedpreferences,Flutter,Dart,Sharedpreferences,尝试使此开关仍能正常工作,并保存和保持应用程序关闭/重新打开。这两种情况都无法实现,一旦开关被激活,当试图重新切换开关时,它将抛出一个错误 The following assertion was thrown while handling a gesture: type 'Future<dynamic>' is not a subtype of type 'bool' 我认为你的问题在于_setValue()在 没有归还任何东西 您应该尝试将此调用放在onChange()的顶部,或

尝试使此开关仍能正常工作,并保存和保持应用程序关闭/重新打开。这两种情况都无法实现,一旦开关被激活,当试图重新切换开关时,它将抛出一个错误

The following assertion was thrown while handling a gesture:
type 'Future<dynamic>' is not a subtype of type 'bool'

我认为你的问题在于_setValue()在

没有归还任何东西

您应该尝试将此调用放在onChange()的顶部,或者让它在末尾返回true

 _setValue() async {
    SharedPreferences prefs = await SharedPreferences.getInstance();
    setState(() {
      units = (prefs.getBool('boolValue'));
      prefs.setBool('boolValue', units);
    });
    return true
  }
或者如果没有必要在onChange(value)调用之前完成_setValue()


您的
onChange
需要一个
bool
作为参数,您正在传入
value&&u setValue()
。您确定此计算结果为
bool

看起来
\u setValue
正在返回一个
未来
,这与
&&
一起不会计算为
bool
,我怀疑是触发了断言错误

您可以将
\u setValue
调用移动到
onChange
方法,然后用新值调用该方法,或者将对
onChange
的调用从一个分离到
\u setValue

onChanged: (bool value,) {
     _setValue();
     onChange(value);
},

只需按如下方式更改代码

onChanged: (bool value,) asyc
          {
            var isValueSet=await _setValue();
            onChange(value && isValueSet);
          },
这里,用于在onChange()方法内部传递的\u setValue()具有未来的返回类型。这意味着您必须等到您的_setValue()未被计算。因此,请尝试如上所述分配未来值


这将解决您的问题。

您是否尝试在最后返回true?在您的情况下,value&&&u setValue()无法计算为布尔值。谢谢,这可以正常工作,我不再收到错误消息,但在关闭应用程序后开关会重新更改。是的,我在最后添加了return true。然后,您需要加载SharedReferences并在构建开关之前获取值(可能使用FutureBuilder)然后将值传递给它。如果您需要帮助,我可以在当天晚些时候给出一个示例。谢谢,这是有效的,我不再收到错误消息,但在关闭应用程序后开关会更改。不确定发生了什么,请尝试给出的解决方案。他们暂时工作,然后停止工作,现在开关根本不工作。从版本控制还原为旧版本,并且只有一个页面的值可以按预期更改。
onChanged: (bool value) {
     _setValue();
     onChange(value);
},
onChanged: (bool value,) {
     _setValue();
     onChange(value);
},
onChanged: (bool value,) asyc
          {
            var isValueSet=await _setValue();
            onChange(value && isValueSet);
          },