跳至主要内容

更新菜单的默认文本样式

摘要

#

菜单使用的默认文本样式已更新为符合 Material 3 规范。

上下文

#

MenuItemButton(在MenuBar和使用MenuAnchor创建的菜单中使用的部件)和DropdownMenuEntry(在DropdownMenu中)的默认文本样式已更新为符合 Material 3 规范。

同样,DropdownMenuTextField的默认文本样式也已更新为符合 Material 3 规范。

变更描述

#

对于 Material 3,MenuItemButton(在MenuBar和使用MenuAnchor创建的菜单中使用的部件)和DropdownMenuEntry(在DropdownMenu中)的默认文本样式已从TextTheme.bodyLarge更新为TextTheme.labelLarge

对于 Material 3,DropdownMenuTextField的默认文本样式已从TextTheme.labelLarge更新为TextTheme.bodyLarge

迁移指南

#

Material 3 的MenuItemButton使用TextTheme.labelLarge作为默认文本样式。要使用以前的默认文本样式,请在MenuItemButton.styleMenuButtonThemeData.style属性中设置TextTheme.bodyLarge文本样式。

迁移前代码

dart
MenuItemButton(
  child: Text(MenuEntry.about.label),
  onPressed: () => _activate(MenuEntry.about),
),
dart
menuButtonTheme: MenuButtonThemeData(
  style: MenuItemButton.styleFrom(
    /// ...
  ),
),

迁移后代码

dart
MenuItemButton(
  style: MenuItemButton.styleFrom(
    textStyle: Theme.of(context).textTheme.bodyLarge,
  ),
  child: Text(MenuEntry.about.label),
  onPressed: () => _activate(MenuEntry.about),
),
dart
menuButtonTheme: MenuButtonThemeData(
  style: MenuItemButton.styleFrom(
    textStyle: Theme.of(context).textTheme.bodyLarge,
  ),
),

Material 3 的DropdownMenuTextField使用TextTheme.bodyLarge作为默认文本样式。要使用以前的默认文本样式,请在DropdownMenu.textStyleDropdownMenuThemeData.textStyle属性中设置TextTheme.labelLarge文本样式。

迁移前代码

dart
DropdownMenu<ColorLabel>(
  initialSelection: ColorLabel.green,
  controller: colorController,
  label: const Text('Color'),
  dropdownMenuEntries: colorEntries,
  onSelected: (ColorLabel? color) {
    setState(() {
      selectedColor = color;
    });
  },
),
dart
dropdownMenuTheme: DropdownMenuThemeData(
  /// ...
),

迁移后代码

dart
DropdownMenu<ColorLabel>(
  textStyle: Theme.of(context).textTheme.labelLarge,
  initialSelection: ColorLabel.green,
  controller: colorController,
  label: const Text('Color'),
  dropdownMenuEntries: colorEntries,
  onSelected: (ColorLabel? color) {
    setState(() {
      selectedColor = color;
    });
  },
),
dart
dropdownMenuTheme: DropdownMenuThemeData(
  textStyle: TextStyle(
    fontStyle: FontStyle.italic,
    fontWeight: FontWeight.bold,
  ),
),

Material 3 的DropdownMenuDropdownMenuEntry使用TextTheme.labelLarge作为默认文本样式。要使用以前的默认文本样式,请在DropdownMenuEntry.styleMenuButtonThemeData.style属性中设置TextTheme.bodyLarge文本样式。

迁移前代码

dart
DropdownMenuEntry<ColorLabel>(
  value: color,
  label: color.label,
),
dart
menuButtonTheme: MenuButtonThemeData(
  style: MenuItemButton.styleFrom(
    /// ...
  ),
),

迁移后代码

dart
DropdownMenuEntry<ColorLabel>(
  style: MenuItemButton.styleFrom(
    textStyle: Theme.of(context).textTheme.bodyLarge,
  ),
  value: color,
  label: color.label,
),
dart
menuButtonTheme: MenuButtonThemeData(
  style: MenuItemButton.styleFrom(
    textStyle: Theme.of(context).textTheme.bodyLarge,
  ),
),

时间线

#

包含于版本:3.14.0-11.0.pre
稳定版发布:3.16

参考

#

API 文档

相关 PR