如何在 Flutter 中传递回调
How to pass callback in Flutter
代码会全部解释:
class ResultOverlay extends StatefulWidget {
final bool _isCorrect;
VoidCallback _onTap;
ResultOverlay(this._isCorrect, this._onTap);
......
......
}
其状态class:
class ResultOverlayState extends State<ResultOverlay>{
@override
Widget build(BuildContext context) {
........
child: new InkWell(
onTap: () => widget._onTap,
.....
.....
}
回调函数的传递:
new ResultOverlay(isCorrect, () {
() => CallAnswerPage();
})
我在这里缺少什么?
一切都很好,除了你如何使用它。
改变
onTap: () => widget._onTap,
到
onTap: widget._onTap,
在你的State
class
里面
我没有正确传递回调。这是正确的语法:
new ResultOverlay(
isCorrect,
() => callAnswerPage()
)
如此愚蠢的错误:)
这是为未来的观众提供的更笼统的答案。
回调类型
有几种不同类型的预定义回调:
final VoidCallback myVoidCallback = () {};
final ValueGetter<int> myValueGetter = () => 42;
final ValueSetter<int> myValueSetter = (value) {};
备注:
- VoidCallback 是一个匿名函数,不带任何参数,returns 没有值。
- ValueGetter 是一个匿名函数,它 returns 一个值,你提供给想要 get 它的人。
- ValueSetter 是一个匿名函数,它接受一个值作为参数,您可以使用它来 set 一些其他值。
有关详细信息,请参阅 。
回调的写法
好
当你被要求提供回调给一个API时,你可以直接写回调:
onPressed: () {},
或者您可以提供回调变量名称(不带括号):
onPressed: myVoidCallback,
不太好
使用这两种形式会不必要地冗长(但如果在变量名后加上括号就可以):
onPressed: () {
myVoidCallback();
},
这个是等效的(但也不必要地冗长):
onPressed: () => myVoidCallback(),
只需使用上面的“好”形式之一。
还不错
如果您想在参数仅请求 void 回调时调用值 setter,则例外:
onPressed: () => myValueSetter(42),
代码会全部解释:
class ResultOverlay extends StatefulWidget {
final bool _isCorrect;
VoidCallback _onTap;
ResultOverlay(this._isCorrect, this._onTap);
......
......
}
其状态class:
class ResultOverlayState extends State<ResultOverlay>{
@override
Widget build(BuildContext context) {
........
child: new InkWell(
onTap: () => widget._onTap,
.....
.....
}
回调函数的传递:
new ResultOverlay(isCorrect, () {
() => CallAnswerPage();
})
我在这里缺少什么?
一切都很好,除了你如何使用它。
改变
onTap: () => widget._onTap,
到
onTap: widget._onTap,
在你的State
class
我没有正确传递回调。这是正确的语法:
new ResultOverlay(
isCorrect,
() => callAnswerPage()
)
如此愚蠢的错误:)
这是为未来的观众提供的更笼统的答案。
回调类型
有几种不同类型的预定义回调:
final VoidCallback myVoidCallback = () {};
final ValueGetter<int> myValueGetter = () => 42;
final ValueSetter<int> myValueSetter = (value) {};
备注:
- VoidCallback 是一个匿名函数,不带任何参数,returns 没有值。
- ValueGetter 是一个匿名函数,它 returns 一个值,你提供给想要 get 它的人。
- ValueSetter 是一个匿名函数,它接受一个值作为参数,您可以使用它来 set 一些其他值。
有关详细信息,请参阅
回调的写法
好
当你被要求提供回调给一个API时,你可以直接写回调:
onPressed: () {},
或者您可以提供回调变量名称(不带括号):
onPressed: myVoidCallback,
不太好
使用这两种形式会不必要地冗长(但如果在变量名后加上括号就可以):
onPressed: () {
myVoidCallback();
},
这个是等效的(但也不必要地冗长):
onPressed: () => myVoidCallback(),
只需使用上面的“好”形式之一。
还不错
如果您想在参数仅请求 void 回调时调用值 setter,则例外:
onPressed: () => myValueSetter(42),