代码将解释所有: -
class ResultOverlay extends StatefulWidget {
final bool _isCorrect;
VoidCallback _onTap;
ResultOverlay(this._isCorrect, this._onTap);
......
......
}
Run Code Online (Sandbox Code Playgroud)
它的州级
class ResultOverlayState extends State<ResultOverlay>{
@override
Widget build(BuildContext context) {
........
child: new InkWell(
onTap: () => widget._onTap,
.....
.....
}
Run Code Online (Sandbox Code Playgroud)
传递回调函数: -
new ResultOverlay(isCorrect, () {
() => CallAnswerPage();
})
Run Code Online (Sandbox Code Playgroud)
我在这里缺少什么?提前致谢 :)
Sur*_*gch 16
对于未来的观众来说,这是一个更普遍的答案。
有几种不同类型的预定义回调:
final VoidCallback myVoidCallback = () {};
final ValueGetter<int> myValueGetter = () => 42;
final ValueSetter<int> myValueSetter = (value) {};
Run Code Online (Sandbox Code Playgroud)
注意事项:
有关更多详细信息,请参阅此答案。
当您被要求为 API 提供回调时,您可以直接编写回调:
onPressed: () {},
Run Code Online (Sandbox Code Playgroud)
或者您可以提供回调变量名称(不带括号):
onPressed: myVoidCallback,
Run Code Online (Sandbox Code Playgroud)
使用这两种形式会不必要地冗长(但如果在变量名后包含括号,则可以):
onPressed: () {
myVoidCallback();
},
Run Code Online (Sandbox Code Playgroud)
这是等效的(但也不必要地冗长):
onPressed: () => myVoidCallback(),
Run Code Online (Sandbox Code Playgroud)
只需使用上面的“好”形式之一。
例外情况是,如果您想在参数仅要求 void 回调时执行诸如调用值设置器之类的操作:
onPressed: () => myValueSetter(42),
Run Code Online (Sandbox Code Playgroud)
pal*_*ara 12
我没有正确传递回调.这是正确的语法: -
new ResultOverlay(isCorrect,
() => callAnswerPage()
)
Run Code Online (Sandbox Code Playgroud)
这么傻的错误:)
除了你如何使用它之外,一切都很好。
改变
onTap: () => widget._onTap,
Run Code Online (Sandbox Code Playgroud)
到
onTap: widget._onTap,
Run Code Online (Sandbox Code Playgroud)
在你的State班级里
| 归档时间: |
|
| 查看次数: |
15113 次 |
| 最近记录: |