代码将解释所有: -
class ResultOverlay extends StatefulWidget {
final bool _isCorrect;
VoidCallback _onTap;
ResultOverlay(this._isCorrect, this._onTap);
......
......
}
其州级
class ResultOverlayState extends State<ResultOverlay>{
@override
Widget build(BuildContext context) {
........
child: new InkWell(
onTap: () => widget._onTap,
.....
.....
}
传递回调函数: -
new ResultOverlay(isCorrect, () {
() => CallAnswerPage();
})
我在这里缺少什么? 在此先感谢:)
答案 0 :(得分:12)
对于未来的观众来说,这是一个更笼统的答案。
有几种不同类型的预定义回调:
final VoidCallback myVoidCallback = () {};
final ValueGetter<int> myValueGetter = () => 42;
final ValueSetter<int> myValueSetter = (value) {};
注意事项:
有关详细信息,请参阅 this answer。
当你被要求向 API 提供回调时,你可以直接编写回调:
onPressed: () {},
或者您可以提供回调变量名称(不带括号):
onPressed: myVoidCallback,
使用这两种形式会不必要地冗长(但如果您在变量名称后包含括号,则可以):
onPressed: () {
myVoidCallback();
},
这个是等价的(但也不必要地冗长):
onPressed: () => myVoidCallback(),
只需使用上面的“好”形式之一。
例外情况是,如果您想在参数仅要求 void 回调时调用 value setter 之类的操作:
onPressed: () => myValueSetter(42),
答案 1 :(得分:8)
我没有正确传递回调。这是正确的语法: -
new ResultOverlay(isCorrect,
() => callAnswerPage()
)
如此愚蠢的错误:)
答案 2 :(得分:3)
除了你如何使用它之外,一切都很好。
更改
onTap: () => widget._onTap,
到
onTap: widget._onTap,
在State
班级