This is a more general answer for future viewers.
Callback types
There are a few different types of predefined callbacks:
final VoidCallback myVoidCallback = () {};
final ValueGetter<int> myValueGetter = () => 42;
final ValueSetter<int> myValueSetter = (value) {};
final ValueChanged<int> myValueSetter = (value) {};
Notes:
- VoidCallback is an anonymous function that takes no arguments and returns no value.
- ValueGetter is an anonymous function that returns a value, which you provide for someone who wants to get it.
- ValueSetter is an anonymous function that takes a value as an argument, which you can use to set some other value.
- ValueChanged has the same function signature and is used the same way as
ValueSetter
, but its name emphasizes that the given value actually changed (and was not just set with the same value again).
See this answer for more details.
Ways to write the callback
Good
When you are asked to provide a callback to an API, you can directly write the callback:
onPressed: () {},
Or you can supply the callback variable name (without parentheses):
onPressed: myVoidCallback,
Less good
It would be unnecessarily verbose to use both forms (but you could if you included the parentheses after the variable name):
onPressed: () {
myVoidCallback();
},
This one is equivalent (but also unnecessarily verbose):
onPressed: () => myVoidCallback(),
Just use one of the "Good" forms from above.
Still good
The exception would be if you wanted to do something like call a value setter when the parameter is only asking for a void callback:
onPressed: () => myValueSetter(42),