概述

#

菜单使用的默认文本样式已更新,以匹配 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