【问题标题】:How to change the background color of PopupMenuItem under the showMenu?如何改变showMenu下PopupMenuItem的背景颜色?
【发布时间】:2019-04-02 14:10:18
【问题描述】:

我不使用 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 为黑色。

【问题讨论】:

标签: dart flutter


【解决方案1】:

您需要将打开菜单的小部件包装在 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),
              ],
            );
          },
        );
      },
    ),
  );
}

【讨论】:

  • 我刚刚更新了我的帖子。你可以查看它。就我而言,showMenu 会更合适。
  • @QiminQiu 我已经更新了代码,你看看。它现在使用showMenu()
  • 你的答案醒了。今天我在使用 showModalBottomSheet 时遇到了类似的问题。它也适用于您的方法。你能告诉我为什么作为 Builder 的父级的 Theme 有效吗?我在 showModalBottomSheet 中尝试过 Theme,但它不起作用。
  • 您需要使用Builder,以便它可以为PopupMenuItemBottomSheet等各种小部件引入新的context
猜你喜欢
  • 1970-01-01
  • 2012-04-02
  • 2022-11-18
  • 2022-09-27
  • 1970-01-01
  • 2013-07-20
  • 2015-05-23
相关资源
最近更新 更多