Flutter почему callback функция вызывается при создании виджета?
В первый раз вижу callback во flutter и не могу понять как они реализуются. У меня есть callback который печатает в консоль всё, что в него передадут
onDelete(dynamic val) {
print(val);
}
Передаю его в виджет
trailing: PopMenuWidget(
onDelete: onDelete(item),
)),
Когда создаеётся PopMenuWidget колбэк onDelete автоматически выстреливает. Причем несколько раз подряд. В таком поведении страном ничего страшного особо нет, но мой колбек обычный, если же я в него передаю setState() то виджет крашится в момент создания error setState() or markNeedsBuild called during build.
Ответы (1 шт):
Передавая колбэк виджету нужно либо указывать ссылку на существующую функцию, либо определять её "по месту", например так:
@override
Widget build(BuildContext context) {
return PopupMenuButton(
onSelected: (val) => print('Selected item is $val'),
// ...
);
}
А в вашем случае передается результат выполнения самой функции, что допускается только когда функция возвращает другую функцию.