如何在flutter中传递回调

时间:2018-05-31 13:42:55

标签: dart flutter

代码将解释所有: -

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

我在这里缺少什么? 在此先感谢:)

3 个答案:

答案 0 :(得分:12)

对于未来的观众来说,这是一个更笼统的答案。

回调类型

有几种不同类型的预定义回调:

final VoidCallback myVoidCallback = () {};
final ValueGetter<int> myValueGetter = () => 42;
final ValueSetter<int> myValueSetter = (value) {};

注意事项

  • VoidCallback 是一个匿名函数,它不接受任何参数,也不返回任何值。
  • ValueGetter 是一个匿名函数,它返回一个值,您提供给想要获取它的人。
  • ValueSetter 是一个匿名函数,它将一个值作为参数,您可以使用它来设置一些其他值。

有关详细信息,请参阅 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班级