【问题标题】:How to access onPressed method of (Flutter/Dart) PopupMenuButton?如何访问(Flutter/Dart)PopupMenuButton 的 onPressed 方法?
【发布时间】:2023-02-18 14:34:13
【问题描述】:

我使用的 PopupMenuButton 图标不够大,无法接收所有点击。我想在顶部使用单独的 GestureDetector(使用堆栈)。为此,我创建了一个 GlobalKey() 并将该键提供给 PopupMenuButton。然后我可以使用键作为“keyVariableName.currentState.{method()}”来调用 PopupMenuButtons 方法。我需要访问的方法是 onPressed(),但它给了我一个错误,并说它不是一个方法。如何访问 PopupMenuButton 的 onPressed?

PopupMenuButton(
   key: dotsKey,

var dotsKey = GlobalKey();
dotsKey.currentState.onPressed();

onPressed() 在编辑器中带有红色下划线。

【问题讨论】:

    标签: flutter dart popupmenubutton


    【解决方案1】:

    PopupMenuButton 小部件在其状态类中没有 onPressed 方法。相反,它有一个 onSelected 属性,您可以使用它来处理菜单项的选择。

    要在点击单独的 GestureDetector 时打开弹出菜单,可以使用 PopupMenuButtonState 类的 showButtonMenu 方法,该类是 PopupMenuButton 的状态类。您可以通过调用 dotsKey.currentState 获取状态实例。

    这是一个示例,说明如何使用 PopupMenuButton 和单独的 GestureDetector 与 Stack 来实现您想要的:

    class MyWidget extends StatelessWidget {
      final dotsKey = GlobalKey<PopupMenuButtonState<String>>();
    
      @override
      Widget build(BuildContext context) {
        return Stack(
          children: [
            GestureDetector(
              onTap: () {
                // Show the popup menu when tapping on the GestureDetector
                dotsKey.currentState.showButtonMenu();
              },
              child: Icon(Icons.more_vert),
            ),
            Positioned(
              // Position the PopupMenuButton at the same position as the icon
              child: PopupMenuButton<String>(
                key: dotsKey,
                onSelected: (String value) {
                  // Handle the menu item selection
                  print('Selected: $value');
                },
                itemBuilder: (BuildContext context) => [
                  PopupMenuItem(
                    value: 'Item 1',
                    child: Text('Item 1'),
                  ),
                  PopupMenuItem(
                    value: 'Item 2',
                    child: Text('Item 2'),
                  ),
                ],
              ),
            ),
          ],
        );
      }
    }
    

    这样,GestureDetector 位于 PopupMenuButton 图标上方,当它被点击时,将在从 dotsKey.currentState 获得的 PopupMenuButtonState 实例上调用 showButtonMenu 方法。 PopupMenuButton 的 onSelected 属性用于处理菜单项的选择。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-05-10
      • 1970-01-01
      • 1970-01-01
      • 2019-11-21
      • 1970-01-01
      • 2019-07-30
      • 2023-02-01
      • 2021-05-10
      相关资源
      最近更新 更多