我想将PopupMenuButton
的菜单放在应用的侧面,但它总是与侧面留下大约10个逻辑像素的间隙:
我已经尝试给予offset
属性一个负的dx
值,但这似乎没有任何作用。据我所知,PopupMenuButton
上没有其他属性可以改变菜单的位置。
如何将菜单准确地定位在侧面?我错过了什么明显的东西吗?
顺便说一句:PopupMenuButton
位于Scaffold
的AppBar
中。
下面是我的PopupMenuButton
代码:
PopupMenuButton(
color: cardBackground,
elevation: 0.0,
shape: RoundedRectangleBorder(
side: BorderSide(
width: 0.5,
color: cardText,
)),
padding: EdgeInsets.all(0.0),
offset: Offset(-10.0, kToolbarHeight),
onSelected: (value) => doPaletteAction(value),
itemBuilder: (BuildContext context) => createPopUpItems(),
icon: Icon(
Icons.format_list_bulleted_rounded,
color: appBarIconButtons,
)
)
3条答案
按热度按时间8ehkhllq1#
材料弹出菜单边距是硬编码的:PopupMenuButton > PopupMenuButtonState > showMenu > _PopupMenuRoute > _PopupMenuRouteLayout > _kMenuScreenPadding = 8.0
你能做的是
1.玩转:
PopupMenuButton
)1.进行可靠的修复:
import 'package:flutter/material.dart';
*0h4hbjxa2#
问题出在popup_menu.dart:
填充是硬编码的,但是您可以在项目中创建一个替代CustomPopupMenuButton并更改常量值,如下面的gist
在代码中添加该类后,只需将实现切换为:
弹出菜单按钮:
CustomPopupMenuButton:
yjghlzjz3#
自定义弹出菜单在我的Pixel3上看起来像这样。在另一部手机上看起来可能不同。
我不想浪费你的时间,所以你可以复制粘贴下面的代码。下面还有更长的解释
甲状腺素
创建覆盖条目并在按下菜单按钮时显示它。。您可以添加填充和其他所有内容。
你需要一个覆盖来构建一个自定义弹出菜单。Overlay Docs。它允许您构建浮动在其他小部件之上的小部件。我们需要一个GlobalKey来标识持有菜单按钮的容器。我们还需要一个手势检测器来识别屏幕点击。
步骤:
1.创建菜单按钮,为全局键、覆盖、菜单大小和菜单偏移量声明变量。
1.创建一个自定义的PopupMenu部件(我使用了一堆ListTiles和临时的分隔符)。注意,我们只能改变菜单的高度。它从父节点继承宽度。
1.在它自己的函数中创建覆盖条目。我们使用一个Positioned小部件将其放置在屏幕上的特定位置。
1.显示菜单的逻辑(也可以改变宽度和屏幕边缘的偏移量)。全局键在这里很有用。它允许我们获取父容器的信息,比如它的位置和大小。注意事项
1.关闭菜单的逻辑