有什么想法如何从 Flutter PopupmenuButton 中删除巨大的填充吗?像ShrinkWrap 或者甚至可以使用的替代小部件之类的东西?它破坏了我的元素的对齐。
我尝试将其设置padding为 0 但完全没有效果。
padding: EdgeInsets.all(0)
Run Code Online (Sandbox Code Playgroud)
在我的 flutter 移动应用程序中,我使用了一个放置在视图底部的 PopupMenuButton。如果我点击它,软键盘会被关闭,因为我猜文本输入失去了焦点。所以弹出菜单没有显示在正确的位置。
我想覆盖此行为以防止 PopupMenuButton 关闭键盘。也许通过扩展 PopupMenuButton 类?但我真的不知道该怎么做。
点击按钮前打开键盘:

菜单位置不对:

我想在 flutter 中更改 PopupMenuButton 的形状,想在顶部添加一个三角形,如下图所示,我在 google 上花了很多时间,但没有取得任何成就,请帮助我,我是 flutter 新手,所以我不这样做知道如何更改此默认容器,现在它只有白色圆形容器,白色箭头/三角形未添加在其顶部。请帮忙,提前致谢
popUpMenu= PopupMenuButton<String>(
key: _menuKey,
offset: Offset(50,100),
padding: EdgeInsets.all(0.0),
onSelected: (value) {
if (value == "Tax & Additional Charges") {
endDrawerController.drawerKey.value =
EndDrawerKeys.TaxAndAdditionalChargesEndDrawer;
endDrawerController.scaffoldKey.currentState.openEndDrawer();
print("Entering in tax");
} else if (value == "Hold this Invoice") {
endDrawerController.drawerKey.value =
EndDrawerKeys.HoldInvoiceEndDrawer;
endDrawerController.scaffoldKey.currentState.openEndDrawer();
}
},
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.all(Radius.circular(10.h))),
itemBuilder: (context) => [
PopupMenuItem(
value: "Tax & Additional Charges",
child: popUpMenuSingleItem(
icon: AppAssets.DeliveryIcon,
text: "Tax & Additional Charges",
topMargin: 15.h),
),
PopupMenuItem(
value: "Hold this …Run Code Online (Sandbox Code Playgroud) 我试图让菜单保持打开状态,以便我可以一次选择多个类别,而无需在每次选择后快速返回页面。
如果它可以像 Excel 过滤数据(或 Libreoffice Autofilter)那样运行就完美了
添加了截图
任何想法,将不胜感激!
代码:
import 'package:flutter/material.dart';
void main() { return runApp(MaterialApp(
home: MenuDemo(), )); }
class MenuDemo extends StatefulWidget { const MenuDemo({Key key}) : super(key: key);
static const String routeName = '/material/menu';
@override MenuDemoState createState() => new MenuDemoState(); }
class MenuDemoState extends State<MenuDemo> { final GlobalKey<ScaffoldState> _scaffoldKey = new GlobalKey<ScaffoldState>();
final String _checkedValue1 = 'One'; final String _checkedValue2 = 'Two'; final String _checkedValue3 = 'Free'; final String
_checkedValue4 = 'Four'; List<String> _checkedValues;
@override …Run Code Online (Sandbox Code Playgroud) 我正在使用 flutter PopUpMenuButton。我想要的是,当我选择菜单上的任何项目时,不应关闭弹出窗口,而是让我从弹出窗口中选择多个值。文档说您可以覆盖 handleTap 属性,但我不清楚该怎么做那?这是有记录的
///The [handleTap] method can be overridden to adjust exactly what happens when
/// the item is tapped. By default, it uses [Navigator.pop] to return the
/// [PopupMenuItem.value] from the menu route.
void handleTap() {
Navigator.pop<T>(context, widget.value);
}
Run Code Online (Sandbox Code Playgroud) 我试图在长按时创建的自定义小部件上显示菜单上下文(点击时有另一种行为)。
我尝试将 GestureDetector 与 onLongPress 结合使用并使用函数 showMenu,但它在角落显示菜单,而不是在按下的小部件上方。我已经看到了一种解决方法来获取小部件的位置并将其传递给 showMenu,但对我来说它看起来很混乱。
return new GestureDetector(
child: _defaultBuild(),
onTap: onTap,
onLongPress: () {
showMenu(
items: <PopupMenuEntry>[
PopupMenuItem(
//value: this._index,
child: Row(
children: <Widget>[
Text("Context item1")
],
),
)
],
context: context,
position: _getPosition(context)
);
}
);
RelativeRect _getPosition(BuildContext context) {
final RenderBox bar = context.findRenderObject();
final RenderBox overlay = Overlay.of(context).context.findRenderObject();
final RelativeRect position = RelativeRect.fromRect(
Rect.fromPoints(
bar.localToGlobal(bar.size.bottomRight(Offset.zero), ancestor: overlay),
bar.localToGlobal(bar.size.bottomRight(Offset.zero), ancestor: overlay),
),
Offset.zero & overlay.size,
);
return position;
}
Run Code Online (Sandbox Code Playgroud)
我也尝试过使用 PopupMenuButton 但无法在 LongPressed 上显示菜单。 …
我是 Java 新手,我想知道如何在单击项目时防止 MenuButton 弹出窗口关闭,我尝试了以下功能,我在本网站上找到了该功能,但似乎没有任何作用。我需要这个来克隆我的 C# 应用程序,以便学习 Java。
@FXML
private MenuButton menuButton;
@FXML
void initialize() {
CheckMenuItem menuButtonItem1 = new CheckMenuItem("Item 1");
CheckMenuItem menuButtonItem2 = new CheckMenuItem("Item 2");
CheckMenuItem menuButtonItem3 = new CheckMenuItem("Item 3");
menuButtonItem1.setOnAction(new EventHandler<ActionEvent>() {
public void handle(ActionEvent e) {
e.consume();
}
});
menuButtonItem2.setOnAction(new EventHandler<ActionEvent>() {
public void handle(ActionEvent e) {
e.consume();
}
});
menuButtonItem3.setOnAction(new EventHandler<ActionEvent>() {
public void handle(ActionEvent e) {
e.consume();
}
});
}
Run Code Online (Sandbox Code Playgroud) flutter ×6
auto-close ×1
dart-pub ×1
extends ×1
fxml ×1
javafx ×1
long-press ×1
overriding ×1
shapes ×1
triangle ×1