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),
),
);