dart - 如何改变showMenu下PopupMenuItem的背景颜色?

标签 dart flutter

我不使用 PopupMenuButton。

因为在我的情况下,showMenu 会更合适。

onLongPress: () => _onRoomLongPressed(context, _tappedPosition, model, room),
void _onRoomLongPressed(BuildContext context, Offset tappedPosition,
    RoomsModel model, Room room) {
  final RenderBox overlay = Overlay.of(context).context.findRenderObject();

  showMenu(
    context: context,
    position: RelativeRect.fromRect(
        tappedPosition & Size.zero, Offset.zero & overlay.size),
    items: [
      PopupMenuItem(
        value: 'delete',
        child: Text('delete'),
      ),
    ],
  ).then((String value) {
    switch (value) {
      case 'delete':
        model.remove(room);
        break;
    }
  });
}

不要更改 MaterialApp() 的主题。

我希望 PopupMenuItem 的背景颜色为白色,Text 颜色为黑色。

最佳答案

您需要将打开菜单的小部件包装在 Builder 中,并将 Theme 作为此 Builder 的父级。这是让您前进的代码。

@override
Widget build(BuildContext context) {
  return Theme(
    data: Theme.of(context).copyWith(
      cardColor: Colors.white,
      textTheme: Theme.of(context).textTheme.apply(bodyColor: Colors.black),
    ),
    child: Builder(
      builder: (context) {
        return RaisedButton(
          child: Text("Show menu"),
          onPressed: () {
            showMenu(
              context: context,
              position: RelativeRect.fromLTRB(0, 100, 0, 0),
              items: [
                PopupMenuItem(child: Text("Item 0"), value: 0),
                PopupMenuItem(child: Text("Item 1"), value: 1),
                PopupMenuItem(child: Text("Item 2"), value: 2),
              ],
            );
          },
        );
      },
    ),
  );
}

enter image description here

关于dart - 如何改变showMenu下PopupMenuItem的背景颜色?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55476915/

相关文章:

dart - 多个小部件使用相同的 GlobalKey

ios - 尝试发布 iOS 应用程序时出现黑屏问题

json - 解析 dart 中的对象(未处理的异常 : type '_InternalLinkedHashMap<dynamic, dynamic>' is not a subtype of type 'Map<String, dynamic>' )

webview - 为什么 initState 在 WebView 上的 url 更改后不起作用?

user-interface - 如何在 flutter 中去除卡片的内部填充?

flutter - 如何在 Flutter DataColumn 小部件中将标签居中?

按下按钮时不显示 flutter 对话框

android - Flutter开发(flutter-dev)›需要紧急帮助…由于gradle问题,我无法在android设备中运行flutter应用,并且无法构建apk

json - _TypeError(类型 'List<dynamic>'不是类型 'Map<String, dynamic>'的子类型)

dart - 为什么在某些Dart关键字前面加一个ampsat ('@')