尝试使此开关仍然起作用,并保存并保持应用程序关闭/重新打开。这些都无法实现,一旦激活开关,尝试将开关改回原位时将抛出错误。
The following assertion was thrown while handling a gesture:
type 'Future<dynamic>' is not a subtype of type 'bool'
-
void onChange(bool value) {
setState(() {
brain.units = value;
});
}
//Shared Prefs saver
void initState() {
super.initState();
_loadValue();
}
_loadValue() async {
SharedPreferences prefs = await SharedPreferences.getInstance();
setState(() {
units = (prefs.getBool('boolValue'));
});
}
_setValue() async {
SharedPreferences prefs = await SharedPreferences.getInstance();
setState(() {
units = (prefs.getBool('boolValue'));
prefs.setBool('boolValue', units);
});
}
Widget build(BuildContext context) {
return Container(
child: Center(
child: SwitchListTile(
title: Text(this.unitName = brain.unitClass(),
value: brain.units,
secondary: Icon(FontAwesomeIcons.balanceScale, color: kIconColor),
onChanged: (
bool value,
) {
onChange(value && _setValue());
},
),
),
);
}
}
答案 0 :(得分:0)
我认为您的问题在于_setValue()在
onChange(value && _setValue());
没有返回任何内容。
您应该尝试将此调用放在onChange()的顶部,或者让它在末尾返回true。
_setValue() async {
SharedPreferences prefs = await SharedPreferences.getInstance();
setState(() {
units = (prefs.getBool('boolValue'));
prefs.setBool('boolValue', units);
});
return true
}
或者如果不需要在onChange(value)调用之前完成_setValue()
onChanged: (bool value) {
_setValue();
onChange(value);
},
答案 1 :(得分:0)
您的onChange
期望以bool
作为参数,而您正在传递value && _setValue()
。您确定这计算为bool
吗?
我怀疑_setValue
似乎正在返回Future<dynamic>
,并且它与&&
一起不能得出bool
并触发了断言错误。
您可以将_setValue
调用移至onChange
方法,然后使用新值对其进行调用,或者将对onChange
的调用从对_setValue
的调用中分开:
onChanged: (bool value,) {
_setValue();
onChange(value);
},
答案 2 :(得分:0)
只需按以下步骤更改代码,
onChanged: (bool value,) asyc
{
var isValueSet=await _setValue();
onChange(value && isValueSet);
},
在这里,您要用于传递内部onChange()方法的_setValue()具有Future返回类型。这意味着您必须等到未评估_setValue()为止。因此,请尝试如上所述分配未来值。
这将解决您的问题。