Flutter — функция вызывается OnTap: но не с Ontap() {...}

Я довольно неопытен во Flutter, я создал виджет с этим фрагментом кода внутри:

С таким кодом: (функция ToolModify не вызывается)

      final VoidCallback ToolModify;


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

Вместо этого он вызывается с кодом, написанным следующим образом:

      onTap: widget.ToolModify,

Может ли кто-нибудь объяснить мне, почему это происходит?

Поскольку мне нужно написать другие строки кода, кроме widget.ToolModify; как я могу вызвать функцию ToolModify внутри OnTap: () {...} ??

Надеюсь, кто-нибудь может мне помочь. Спасибо :)

2 ответа

Это совершенно законный и хороший стиль, чтобы кодировать так:

      onTap: widget.ToolModify,

В этом случае обозначает функцию, и вы назначаете функцию, чтобы сделать onTap вызвать функцию позже.

Если вы называете это так, вы создаете новую анонимную функцию без параметров. () {}который просто вызывает другую функцию:

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

Обратите внимание, что widget.ToolModify обозначает саму функцию. Пока widget.ToolModify()вызывает функцию без параметров.

Более того, вы можете написать это, так как вы возвращаете только одно выражение:

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

Пример

Взгляните на этот пример, в котором определяется функция ad(), которая возвращает анонимную функцию, а затем применяет ее к некоторым аргументам:

        // 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

вам нужно вызвать метод:

      onTap: () {
  // rest of the code
  widget.ToolModify(); // notice the brackets
},
Другие вопросы по тегам