所以我有一个声明为内联的函数,不得不删除它,因为它产生了意想不到的结果。
RadioListTile<Wealth>(
title: Text("Rich"),
value: Wealth.RICH,
groupValue: state,
onChanged: (newValue) => changeStatus,
)
void changeStatus(Wealth newValue) {
setState(() {
state = newValue;
});
}
那个代码不起作用,但是一旦我把它改成这个它就起作用了..
RadioListTile<Wealth>(
title: Text("Rich"),
value: Wealth.RICH,
groupValue: state,
onChanged: (newValue) {
if (newValue == null) return;
changeStatus(newValue);
},
)
两者之间有什么区别,为什么第一个代码片段不起作用?谢谢
答案 0 :(得分:3)
第一个片段产生了意想不到的结果,因为当你这样做时
onChanged: (newValue) => changeStatus,
您正在创建一个 lambda,它接受一个参数 newValue
并返回函数 changeStatus
,而不实际调用它。
这应该被替换为
onChanged: (newValue) => changeStatus(newValue),
或
onChanged: changeStatus,
但是,如果您启用了空安全,这仍然会引发错误,因为 onChanged
的函数类型是 void Function(Wealth?)
,而您的 changeStatus
函数类型是 {{1} }.要解决此问题,只需将您的 void Function(Wealth)
函数更改为
changeStatus