Flutter, как я могу получить контекст в виджете PopupMenuButton? - PullRequest
0 голосов

У меня есть PopupMenuButton. Но если я хочу вызвать метод, который перейдет на другую страницу

Navigator.push(context,MaterialPageRoute(builder: (context) => SingleOrder()),);

, у меня возникнет ошибка. Неопределенное имя context. Как мне получить контекст в Navigator.push?

Widget _childPopup() => PopupMenuButton<int>(

 onSelected: (result) {
  if (result == 0) {
  Navigator.push(
    context,
    MaterialPageRoute(builder: (context) => SingleOrder()),
   );
 }
},

itemBuilder: (context) => [
  PopupMenuItem(
   value: 0,
    child: Text(
    "MENU 1",
    style: TextStyle(
        color: Colors.black54),
  ),
),
PopupMenuItem(
  value: 1,
  child: Text(
    "MENU 2",
    style: TextStyle(
        color:  Colors.black54),
    ),
  ),
],
);

1 Ответ

1 голос
/ 12 июля 2020

Вам необходимо передать BuildContext вашей функции _childPopup. Вы, вероятно, определили эту функцию в месте, где BuildContext напрямую недоступен. Пример.

Widget _childPopup(BuildContext context) => PopupMenuButton<int>(

 onSelected: (result) {
  if (result == 0) {
  Navigator.push(
    context,
    MaterialPageRoute(builder: (context) => SingleOrder()),
   );
 }
},

itemBuilder: (context) => [
  PopupMenuItem(
   value: 0,
    child: Text(
    "MENU 1",
    style: TextStyle(
        color: Colors.black54),
  ),
),
PopupMenuItem(
  value: 1,
  child: Text(
    "MENU 2",
    style: TextStyle(
        color:  Colors.black54),
    ),
  ),
],
);

Это гарантирует, что BuildContext будет доступен для функции, и позволит вам лучше контролировать, какой контекст он будет использовать.

...