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
},