Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter 如何在PopupMenuItem中使用onTap或onPressed_Flutter_Dart - Fatal编程技术网

Flutter 如何在PopupMenuItem中使用onTap或onPressed

Flutter 如何在PopupMenuItem中使用onTap或onPressed,flutter,dart,Flutter,Dart,如何在PopupMenuItem 这是我的密码: actions: <Widget>[ PopupMenuButton( icon: Icon(Icons.settings), itemBuilder: (context) => [ PopupMenuItem( child: Text("Settings"), ), PopupMenuItem( child: Text("Flutter.i

如何在
PopupMenuItem

这是我的密码:

actions: <Widget>[
  PopupMenuButton(
    icon: Icon(Icons.settings),
    itemBuilder: (context) => [
      PopupMenuItem(
        child: Text("Settings"),
      ),
      PopupMenuItem(
        child: Text("Flutter.io"),
      ),
      PopupMenuItem(
        child: Text("Google.com"),
      ),
    ],
  ),
]
以下是我的依赖项:

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';


有一个名为
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,
    ),
  ],
)

-根据评论编辑-

就是这样:

class MyHomePage extends StatefulWidget {
  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  var items = [{'name':'Settings','value':0}, {'name':'Flutter.io','value':1}, {'name':'Google.com',,'value':2}];

  @override
  Widget build(BuildContext context) {
    return Scaffold(
        body: Center(
      child: PopupMenuButton(
              onSelected: (x) {
           if(x==0){
                Navigator.push(
                     context,
                     MaterialPageRoute(builder: (context) => SettingPage()), );}
              },
              icon: Icon(Icons.settings),
              itemBuilder: (context) => items
                  .map<PopupMenuItem>((element) => PopupMenuItem(
                        child: Text(element['name]),
                        value: element['value'],
                      ))
                  .toList()),


    ));
  }
}

类MyHomePage扩展StatefulWidget{
@凌驾
_MyHomePageState createState()=>\u MyHomePageState();
}
类_MyHomePageState扩展状态{
var items=[{'name':'Settings','value':0},{'name':'flatter.io','value':1},{'name':'Google.com','value':2}];
@凌驾
小部件构建(构建上下文){
返回脚手架(
正文:中(
孩子:弹出菜单按钮(
当选:(x){
如果(x==0){
导航器。推(
上下文
MaterialPage路由(生成器:(上下文)=>SettingPage(),);}
},
图标:图标(图标.设置),
itemBuilder:(上下文)=>项
.map((元素)=>PopupMenuItem(
子元素:文本(元素['name]),
值:元素['value'],
))
.toList()),
));
}
}

只需将此添加到您的弹出菜单按钮:

onSelected: (result) {
    if (result == 0) {
        Navigator.push(
            context,
            MaterialPageRoute(builder: (context) => SettingPage()),
        );
    }
},
并将设置按钮更改为:

PopupMenuItem(
    child: Text("Settings"),
    value: 0,
),
可调用值

PopupMenuButton(
  icon: Icon(Icons.settings),
  onSelected: (value) {
    value();
  },
  itemBuilder: (context) => [
    PopupMenuItem(
      child: Text('Settings'),
      value: () {
        debugPrint('open Settings');
      },
    ),
    PopupMenuItem(
      child: Text('Flutter.io'),
      value: () {
        debugPrint('goto Flutter.io');
      },
    ),
  ],
)

使用
showMenu(…)


您可以使用InkWell widgetThank包装菜单项,但我想在点击或单击设置PopupMenuItem时导航到设置页面()。您好,我想在点击或单击设置PopupMenuItem时导航到设置页面()。您好,我想导航到设置页面()点击或单击设置弹出菜单项。我已经完成了,但它显示:错误:未找到:'dart:js'。我已经导入了dart:jsI,但它显示:Error:notfound:'dart:js'。我已经导入了dart:js,所以写下:
import'dart:js'在文件顶部,我已经完成了。我已经更新了这个问题,请调查一下。将这一行添加到其他导入的上面。一开始line@no_fate你让我开心,谢谢你,亲爱的。
PopupMenuButton(
  icon: Icon(Icons.settings),
  onSelected: (value) {
    value();
  },
  itemBuilder: (context) => [
    PopupMenuItem(
      child: Text('Settings'),
      value: () {
        debugPrint('open Settings');
      },
    ),
    PopupMenuItem(
      child: Text('Flutter.io'),
      value: () {
        debugPrint('goto Flutter.io');
      },
    ),
  ],
)
class PopupItem<T> extends PopupMenuItem<T> {

  final Function() onTap;

  PopupItem({this.onTap, Widget child, Key key})
      : super(child: child, key: key);

  @override
  _PopupItemState<T> createState() => _PopupItemState<T>();
}

class _PopupItemState<T> extends PopupMenuItemState<T, PopupItem<T>> {
  @override
  void handleTap() {
    widget.onTap?.call();
    super.handleTap();
  }
}
  Widget _itemDelete() => PopupItem(
        onTap: () {
          // Handle tap here
        },
        child: Text(...)
      );