flutter 为什么onTap函数在有参数时不点击就运行?

o4hqfura  于 2023-03-04  发布在  Flutter
关注(0)|答案(3)|浏览(207)

我是编程新手。我的问题是为什么当我使用参数时,这个函数没有被调用?

String _gesture = 'No Gesture Detected';
  _printgesture(var gestureName) {
    setState(() {
      _gesture = gestureName;
      print("PRINTGESTURE FUNCTION CALLED");
    });
  }

InkWell(
       onTap: _printgesture('Tap Detected'),
       // onTap: () {
       //   _printgesture('Tap Detected');
       // },
       child: Icon(Icons.dangerous_rounded, size: 300),
),

我把它写在匿名函数里面,虽然它工作了,但我还是想知道为什么它会自动运行。

q9rjltbz

q9rjltbz1#

变更

onTap: _printgesture('Tap Detected'),

onTap: (){_printgesture('Tap Detected'),}

由于onTap是GestureTapCallback函数类型,当在onTap: _printgesture('Tap Detected'),上使用时,您将直接执行printgesture('Tap Detected'),而无需等待点击函数被按下。因此,当您将其更改为(){_printgesture('Tap Detected')时,该函数将仅在点击时被调用。
参考:https://api.flutter.dev/flutter/gestures/GestureTapCallback.html

z9smfwbn

z9smfwbn2#

onTap: () => _printgesture('Tap Detected'),

尝试将其替换为onTap函数

kkbh8khc

kkbh8khc3#

当你写作的时候

onTap: _printgesture('Tap Detected'),

你马上执行_printgesture,并把这个函数的结果放到onTap参数中,顺便说一下,这个参数是null,这会导致onTap根本不起作用.
我真的很惊讶它能编译,但那是因为你没有为_printgesture定义一个返回类型,如果你正确地将它定义为void _printgesture(var gestureName) {,你会发现你的代码甚至不能编译。

相关问题