Я пытаюсь сделать то же самое, что и плакат в следующем вопросе о передаче функции в состояние виджета с отслеживанием состояния: Доступ к функции виджета с отслеживанием состояния в его классе состояния? порхать
В этом примере (тот же самый, над которым я работаю и, вероятно, из того же видео на YouTube), как мне переместить функцию в раздел состояния с отслеживанием состояния и передать два параметра через конструктор с отслеживанием состояния?
Был бы признателен за любую помощь!
Решение проблемы
Вы можете передать функцию обратного вызова StatelessWidget во время инициализации. Это мой подход к инициализации ActionMenu, который вызывает свои функции из родительского класса.
late ActionMenu actionMenu;
@override
void initState() {
super.initState();
// Initialize ActionMenu
// arguments passed are Home Screen functions
// that can be in ActionMenu class
actionMenu = ActionMenu(this.settings, this.logout);
}
settings(){
// TODO
}
logout(){
// TODO
}
...и в ActionMenu. Теперь вы можете вызывать функции внутри StatelessWidget.
enum MenuOptions { menuSettings, menuLogout }
class ActionMenu extends StatelessWidget {
final Function menuSettings, menuLogout;
ActionMenu(this.menuSettings, this.menuLogout);
@override
Widget build(BuildContext context) {
return PopupMenuButton<MenuOptions>(
onSelected: (MenuOptions value) {
switch (value) {
case MenuOptions.menuSettings:
this.menuSettings();
break;
case MenuOptions.menuLogout:
this.menuLogout();
break;
}
},
itemBuilder: (BuildContext context) => <PopupMenuItem<MenuOptions>>[
PopupMenuItem<MenuOptions>(
value: MenuOptions.menuSettings,
child: Text('Settings'),
),
PopupMenuItem<MenuOptions>(
value: MenuOptions.menuLogout,
child: Text('Logout'),
),
],
);
}
}
Комментариев нет:
Отправить комментарий