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 шт):

Автор решения: Spatz

Передавая колбэк виджету нужно либо указывать ссылку на существующую функцию, либо определять её "по месту", например так:

  @override
  Widget build(BuildContext context) {
    return PopupMenuButton(
      onSelected: (val) => print('Selected item is $val'),
      // ...
    );
  }

А в вашем случае передается результат выполнения самой функции, что допускается только когда функция возвращает другую функцию.

→ Ссылка