Flutter 颤振:覆盖下拉菜单项的文本样式将取消禁用状态的自动显示

Flutter 颤振:覆盖下拉菜单项的文本样式将取消禁用状态的自动显示,flutter,flutter-layout,Flutter,Flutter Layout,我有一个带有嵌套的PopupMenuItems的PopupMenuButton,每个按钮依次有一个嵌套的Text。可以启用PopupMenuItem中的一个,该属性由相应的属性控制,并相应地显示(颜色为亮/淡) 如果我覆盖文本的样式,它将以正确的样式显示,但不再尊重已启用的属性 PopupMenuItem( value: MenuItems.switchTheme, child: Text('Auto-switch color scheme', style: Theme.of(conte

我有一个带有嵌套的
PopupMenuItem
s的
PopupMenuButton
,每个按钮依次有一个嵌套的
Text
。可以启用
PopupMenuItem
中的一个,该属性由相应的属性控制,并相应地显示(颜色为亮/淡)

如果我覆盖
文本的样式
,它将以正确的样式显示,但不再尊重
已启用的
属性

PopupMenuItem(
  value: MenuItems.switchTheme,
  child: Text('Auto-switch color scheme', style: Theme.of(context).textTheme.button),
  enabled: prefs.getBool(describeEnum(Prefs.manuallySetDark)) != null,
),

这不是意料之中的事吗?它值得在github上发布吗?

事实证明,
PopupMenuItem
有一个
textStyle
属性,它说:

弹出菜单项的文本样式。 如果此属性为null,则使用PopupMenuThemeData.textStyle。如果PopupMenuThemeData.textStyle也为null,则使用ThemeData.textTheme.subtitle1

因此,以下主题在不修改构建
PopupMenuItem
s的代码的情况下按预期工作:

final darkTheme = ThemeData(
  brightness: Brightness.dark,
  appBarTheme: AppBarTheme(color: Colors.grey[800]),
  textTheme: TextTheme(
    subtitle1: TextStyle(color: Colors.indigo[800], fontSize: 22, fontWeight: FontWeight.bold),
    bodyText2: TextStyle(color: Colors.indigo, fontSize: 16),
    caption: TextStyle(color: Colors.indigo, fontSize: 16),
    button: TextStyle(color: Colors.white, fontSize: 16),
  ),
  // addition:
  popupMenuTheme: PopupMenuThemeData(
    color: Colors.grey[800],
    textStyle: TextStyle(color: Colors.white, fontSize: 16),
  ),
);
PopupMenuItem(
  value: MenuItems.switchTheme,
  child: Text('Auto-switch color scheme', style: Theme.of(context).textTheme.button),
  enabled: prefs.getBool(describeEnum(Prefs.manuallySetDark)) != null,
),
final darkTheme = ThemeData(
  brightness: Brightness.dark,
  appBarTheme: AppBarTheme(color: Colors.grey[800]),
  textTheme: TextTheme(
    subtitle1: TextStyle(color: Colors.indigo[800], fontSize: 22, fontWeight: FontWeight.bold),
    bodyText2: TextStyle(color: Colors.indigo, fontSize: 16),
    caption: TextStyle(color: Colors.indigo, fontSize: 16),
    button: TextStyle(color: Colors.white, fontSize: 16),
  ),
  // addition:
  popupMenuTheme: PopupMenuThemeData(
    color: Colors.grey[800],
    textStyle: TextStyle(color: Colors.white, fontSize: 16),
  ),
);