首页 > 解决方案 > Flutter 如何在 PopupMenuButton 小部件中获取上下文?

问题描述

我有一个 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),
    ),
  ),
],
);

标签: flutter

解决方案


您需要传递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该函数可用,并允许您更好地控制它将使用哪个上下文。


推荐阅读