Skip to content

[material_ui] Migrate M3 IconButton template to use new gen_defaults - #12922

Open
QuncCccccc wants to merge 2 commits into
flutter:mainfrom
QuncCccccc:icon_button_m3_defaults_migration
Open

QuncCccccc wants to merge 2 commits into
flutter:mainfrom
QuncCccccc:icon_button_m3_defaults_migration

Conversation

@QuncCccccc

@QuncCccccc QuncCccccc commented Sep 18, 2026 •

Copy link
Copy Markdown
Contributor

Work toward flutter/flutter#187899.
Fixes flutter/flutter#188417.

This PR migrates the M3 IconButton defaults templates to use the new gen_defaults in material_ui.

The IconButton, IconButton.filled, IconButton.filledTonal, and IconButton.outlined defaults are generated into separate files. The generated defaults remain unchanged.

Pre-Review Checklist

  • I read the [Contributor Guide] and followed the process outlined there for submitting PRs.
  • I read the [AI contribution guidelines] and understand my responsibilities, or I am not using AI tools.
  • I read the [Tree Hygiene] page, which explains my responsibilities.
  • I read and followed the [relevant style guides] and ran [the auto-formatter].
  • I signed the [CLA].
  • The title of the PR starts with the name of the package surrounded by square brackets, e.g. [shared_preferences]
  • I [linked to at least one issue that this PR fixes] in the description above.
  • I followed [the version and CHANGELOG instructions], using [semantic versioning] and the [repository CHANGELOG style], or I have commented below to indicate which documented exception this PR falls under[^1].
  • I updated/added any relevant documentation (doc comments with ///).
  • I added new tests to check the change I am making, or I have commented below to indicate which [test exemption] this PR falls under[^1].
  • All existing and new tests are passing.

@github-actions github-actions Bot added p: material_ui triage-design Should be looked at in design triage labels Sep 18, 2026
…ults_migration

# Conflicts:
#	packages/material_ui/lib/src/icon_button.dart
#	packages/material_ui/tool/gen_defaults/bin/gen_defaults.dart
#	packages/material_ui/tool/gen_defaults/templates/icon_button_template.dart
#	packages/material_ui/tool/gen_defaults/test/gen_defaults_test.dart
@QuncCccccc QuncCccccc added override: no versioning needed Override the check requiring version bumps for most changes override: no changelog needed Override the check requiring CHANGELOG updates for most changes CICD Run CI/CD labels Oct 2, 2026
@QuncCccccc
QuncCccccc marked this pull request as ready for review October 2, 2026 23:28

@gemini-code-assist gemini-code-assist Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request migrates the Material 3 icon button defaults to be generated from the token database using a new IconButtonTemplateM3 template, replacing the inline implementations in icon_button.dart with generated part files and adding corresponding tests. Feedback on the changes highlights a potential inconsistency in the outlined icon button's overlay color configuration, where the focused state blocks use hoveredStateLayerOpacity instead of focusedStateLayerOpacity, and suggests either correcting this or adding a comment if it was an intentional legacy workaround.

Comment on lines +256 to +268
if (states.contains(WidgetState.focused)) {
return ${colorWithOpacity(TokenIconButtonOutlined.selectedFocusedStateLayerColor, TokenIconButtonOutlined.hoveredStateLayerOpacity)};
}
}
if (states.contains(WidgetState.pressed)) {
return ${colorWithOpacity(TokenColorRole.onSurface, TokenIconButtonOutlined.pressedStateLayerOpacity)};
}
if (states.contains(WidgetState.hovered)) {
return ${colorWithOpacity(TokenIconButtonOutlined.unselectedHoveredStateLayerColor, TokenIconButtonOutlined.hoveredStateLayerOpacity)};
}
if (states.contains(WidgetState.focused)) {
return ${colorWithOpacity(TokenIconButtonOutlined.unselectedFocusedStateLayerColor, TokenIconButtonOutlined.hoveredStateLayerOpacity)};
}

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

In the _IconButtonVariant.outlined overlay color configuration, both focused state blocks (lines 257 and 267) are using TokenIconButtonOutlined.hoveredStateLayerOpacity instead of TokenIconButtonOutlined.focusedStateLayerOpacity.\n\nIf this was done intentionally to preserve the legacy 0.08 opacity (since standard focus opacity is typically 0.12), please add a comment explaining this workaround (similar to _legacyDisabledContainerOpacity). Otherwise, if TokenIconButtonOutlined.focusedStateLayerOpacity is available and correct, please use it here to maintain consistency with the other icon button variants.

@QuncCccccc
QuncCccccc requested a review from elliette October 6, 2026 21:27
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

CICD Run CI/CD override: no changelog needed Override the check requiring CHANGELOG updates for most changes override: no versioning needed Override the check requiring version bumps for most changes p: material_ui triage-design Should be looked at in design triage

Projects

None yet

Development

Successfully merging this pull request may close these issues.

icon_button_template.dart

1 participant