Flutter - 函数被称为 OnTap: 但不是与 Ontap () {...}

Flutter - Function is called OnTap: but not with Ontap () {...}

我对 Flutter 很陌生,我用这段代码创建了一个小部件:

代码如下:(未调用ToolModify函数)

final VoidCallback ToolModify;


onTap: () {
  // rest of the code
  widget.ToolModify;
},                             

而是使用如下代码调用它:

onTap: widget.ToolModify,

任何人都可以向我解释为什么会这样吗?

因为除了widget.ToolModify我还需要写其他几行代码;我如何在 OnTap 中调用 ToolModify 函数: () {...} ??

希望有人能帮助我。谢谢:)

您需要实际调用该方法:

onTap: () {
  // rest of the code
  widget.ToolModify(); // notice the brackets
},

像这样编码是完全合法且良好的风格:

onTap: widget.ToolModify,

在这种情况下,widget.ToolModify 表示一个函数,您将函数分配给 onTap 以使 onTap 稍后调用该函数 .

如果你这样调用它,你会创建一个新的匿名和无参数函数 () {},它只调用另一个函数 widget.ToolModify():

onTap: () {
  widget.ToolModify(); 
},

请注意,widget.ToolModify 表示函数本身。而 widget.ToolModify() 调用不带参数的函数。

此外,你可以这样写,因为你return 只是一个表达式:

onTap: () => widget.ToolModify(),

例子

查看此示例,它定义了一个 函数 ad(),return 是一个匿名函数,稍后将其应用于某些参数:

  // This function takes one argument x and returns a new function
  // of one parameter
  Function(int) add( y ) {
    return ( x ) => ( x + y );
  }
  
  // The above => notation is only applicable, if exactly one expression is returned
  // In case the structure of the inner function is more complex, write
  // it using non shorthand notation like so
  Function(int) divideBy( y ) {
    return ( x ) {
      assert( y > 0 );
      return ( x / y );
    };
  }
  
  // Use the above function to create two specialist functions
  Function(int) add100 = add( 100 );
  
  // Simmilar, but implicitly typed
  var add10 = add( 10 );
  
  var halfOf = divideBy( 2 );

  var doubleOf = divideBy( 0.2 );


  // Now apply two specialized functions
  print( add10( 1 ) );
  print( add100( 1) );
  
  print( halfOf( 10 ) );
  print( doubleOf( 10 ) );

输出这个:

11
101
5
50