如何在 PopupMenuItem 中使用 onTap 或 onPressed

Him*_*rma 11 dart flutter

我们如何实现使用onTaponPressedPopupMenuItem

这是我的代码:

actions: <Widget>[
  PopupMenuButton(
    icon: Icon(Icons.settings),
    itemBuilder: (context) => [
      PopupMenuItem(
        child: Text("Settings"),
      ),
      PopupMenuItem(
        child: Text("Flutter.io"),
      ),
      PopupMenuItem(
        child: Text("Google.com"),
      ),
    ],
  ),
]
Run Code Online (Sandbox Code Playgroud)

我想在点击或单击 Settings PopupMenuItem 时导航到 SettingPage()。
即使在遵循下面提到的解决方案之后,甚至在导入 dart:js 之后,我也会收到此错误

Error: Not found: 'dart:js'
import 'dart:js';
Run Code Online (Sandbox Code Playgroud)

这是我的依赖项:

import 'package:bfdi_app/Profile/editProfile.dart';
import 'package:bfdi_app/models/user.dart';
import 'package:bfdi_app/services/collection.dart';
import 'package:bfdi_app/settings.dart';
import 'package:cached_network_image/cached_network_image.dart';
import 'package:flutter/material.dart';
import 'dart:js';

Run Code Online (Sandbox Code Playgroud)

no_*_*ate 20

只需将此添加到您的 PopupMenuButton:

onSelected: (result) {
    if (result == 0) {
        Navigator.push(
            context,
            MaterialPageRoute(builder: (context) => SettingPage()),
        );
    }
},
Run Code Online (Sandbox Code Playgroud)

并将您的设置按钮更改为:

PopupMenuItem(
    child: Text("Settings"),
    value: 0,
),
Run Code Online (Sandbox Code Playgroud)


小智 7

我在使用弹出菜单按钮导航屏幕时遇到了类似的问题,我通过将此方法放入 PopupMenuItem 的 onTap 回调中来解决问题:

    onTap: (){
WidgetsBinding.instance!.addPostFrameCallback((_) {
                      Navigator.push(
                        context,
                        MaterialPageRoute(
                          builder: (context) {
                            return ScreenName();
                          },
                        ),
                      );
                    });
}
Run Code Online (Sandbox Code Playgroud)


Cop*_*oad 6

有一个名为 的属性onSelected,您应该使用它,它处理onTap事件。

PopupMenuButton(
  icon: Icon(Icons.settings),
  onSelected: (newValue) { // add this property
    setState(() {
      _value = newValue; // it gives the value which is selected
    });
  },
  itemBuilder: (context) => [
    PopupMenuItem(
      child: Text("Settings"),
      value: 0,
    ),
    PopupMenuItem(
      child: Text("Flutter.io"),
      value: 1,
    ),
    PopupMenuItem(
      child: Text("Google.com"),
      value: 2,
    ),
  ],
)
Run Code Online (Sandbox Code Playgroud)