Код все объяснит:
class ResultOverlay extends StatefulWidget {
final bool _isCorrect;
VoidCallback _onTap;
ResultOverlay(this._isCorrect, this._onTap);
......
......
}
Его государственный класс:
class ResultOverlayState extends State<ResultOverlay>{
@override
Widget build(BuildContext context) {
........
child: new InkWell(
onTap: () => widget._onTap,
.....
.....
}
Передача функции обратного вызова:
new ResultOverlay(isCorrect, () {
() => CallAnswerPage();
})
Что мне здесь не хватает?





Все хорошо, кроме того, как ты им пользуешься.
Изменять
onTap: () => widget._onTap,
к
onTap: widget._onTap,
внутри вашего класса State
Я неправильно передавал обратный вызов. Вот правильный синтаксис: -
new ResultOverlay(isCorrect,
() => callAnswerPage()
)
Такая глупая ошибка :)
Это более общий ответ для будущих зрителей.
Есть несколько различных типов предопределенных обратных вызовов:
final VoidCallback myVoidCallback = () {};
final ValueGetter<int> myValueGetter = () => 42;
final ValueSetter<int> myValueSetter = (value) {};
Заметки:
Подробнее см. этот ответ.
Когда вас просят предоставить обратный вызов API, вы можете напрямую написать обратный вызов:
onPressed: () {},
Или вы можете указать имя переменной обратного вызова (без скобок):
onPressed: myVoidCallback,
Было бы излишне многословно использовать обе формы (но вы могли бы, если бы вы добавили круглые скобки после имени переменной):
onPressed: () {
myVoidCallback();
},
Это эквивалентно (но также излишне многословно):
onPressed: () => myVoidCallback(),
Просто используйте одну из «Хороших» форм сверху.
Исключение было бы, если бы вы хотели сделать что-то вроде вызова установщика значения, когда параметр запрашивает только обратный вызов void:
onPressed: () => myValueSetter(42),