为什么我的内联箭头函数没有按预期改变状态?

时间:2021-07-31 18:10:34

标签: flutter dart

所以我有一个声明为内联的函数,不得不删除它,因为它产生了意想不到的结果。

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);
              },
            )

两者之间有什么区别,为什么第一个代码片段不起作用?谢谢

1 个答案:

答案 0 :(得分:3)

第一个片段产生了意想不到的结果,因为当你这样做时

onChanged: (newValue) => changeStatus,

您正在创建一个 lambda,它接受一个参数 newValue 并返回函数 changeStatus,而不实际调用它。

这应该被替换为

onChanged: (newValue) => changeStatus(newValue),

onChanged: changeStatus,

但是,如果您启用了空安全,这仍然会引发错误,因为 onChanged 的函数类型是 void Function(Wealth?),而您的 changeStatus 函数类型是 {{1} }.要解决此问题,只需将您的 void Function(Wealth) 函数更改为

changeStatus