Skip to content

Update ButtonStyle documentation #168062

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 2 commits into from
May 22, 2025

Conversation

bleroux
Copy link
Contributor

@bleroux bleroux commented Apr 30, 2025

Description

This PR updates ButtonStyle.minimumSize and ButtonStyle.fixedSize documentation.

It updates the documentation in order to describe the current behavior as it might be surprising.
I have considered changing the behavior related to ButtonStyle.minimumSize but while experimenting I noticed that several widgets in the framework (and several tests) use ButtonStyle.minimumSize with the expectation that the given size is adjusted based on the ambient visual density (and there are probably several similar usages outside of the framework in Google and non-Google apps).

Related Issue

ButtonStyle.minimumSize : Fixes minimumSize not respected properly when visual density is not standard
ButtonStyle.fixedSize : Fixes Button behaves differently in Web/Desktop and Mobile

Tests

Documentation only

@github-actions github-actions bot added framework flutter/packages/flutter repository. See also f: labels. f: material design flutter/packages/flutter/material repository. labels Apr 30, 2025
@flutter-dashboard
Copy link

Golden file changes have been found for this pull request. Click here to view and triage (e.g. because this is an intentional change).

If you are still iterating on this change and are not ready to resolve the images on the Flutter Gold dashboard, consider marking this PR as a draft pull request above. You will still be able to view image results on the dashboard, commenting will be silenced, and the check will not try to resolve itself until marked ready for review.

For more guidance, visit Writing a golden file test for package:flutter.

Reviewers: Read the Tree Hygiene page and make sure this patch meets those guidelines before LGTMing.

Changes reported for pull request #168062 at sha acb0e53

@flutter-dashboard flutter-dashboard bot added the will affect goldens Changes to golden files label Apr 30, 2025
@bleroux bleroux force-pushed the update_button_style_documentation branch from acb0e53 to e5aa4e0 Compare April 30, 2025 12:59
@flutter-dashboard
Copy link

Golden file changes are available for triage from new commit, Click here to view.

For more guidance, visit Writing a golden file test for package:flutter.

Reviewers: Read the Tree Hygiene page and make sure this patch meets those guidelines before LGTMing.

Changes reported for pull request #168062 at sha e5aa4e0

@bleroux bleroux force-pushed the update_button_style_documentation branch from e5aa4e0 to 73bd23b Compare April 30, 2025 13:58
@flutter-dashboard
Copy link

Golden file changes are available for triage from new commit, Click here to view.

For more guidance, visit Writing a golden file test for package:flutter.

Reviewers: Read the Tree Hygiene page and make sure this patch meets those guidelines before LGTMing.

Changes reported for pull request #168062 at sha 73bd23b

@bleroux bleroux force-pushed the update_button_style_documentation branch from 73bd23b to d71c7de Compare April 30, 2025 16:37
@bleroux bleroux requested a review from Piinks April 30, 2025 16:37
@Piinks
Copy link
Contributor

Piinks commented Apr 30, 2025

Thanks for the PR Bruno! By coincidence I was just looking at something super similar - #94098

The delete button on input chip also ends up being less than the material tap target size, unless updated to use MaterialTapTargetSize.padded + VisualDensity.standard.
This feels like a hole for developers to fall into repeatedly, especially around something as serious as accessibility.

I noticed that several widgets in the framework (and several tests) set ButtonStyle.minimumSize with the expectation that the given size is adjusted based on the ambient visual density (and there are probably several similar usages outside of the framework in Google and non-Google apps).
So changing this default behavior does not seem possible at that point.

You are so right about this. I wonder, do you have a sense of how many components are affected by this quirk? It might be worth investigating if we can change this to ensure we have the minimum tap target respected by default. It is very important for accessibility.

Maybe we can look at the default values in ThemeData? WDYT?

@bleroux
Copy link
Contributor Author

bleroux commented May 20, 2025

@Piinks The issue targeted by this PR is somewhat different than #94098.

Here the problem is that ButtonStyle.minimumSize might not be respected on desktop (or when visual density is not VisualDensity.standard). Changing this behavior is difficult because current usages expect that the size will be adjusted based on the visual density. For instance, the M3 defaults are given only for mobile and then they are adjusted based on visual density. If we change this behavior it would be the responsability of the code (user code, framework code relying on this behavior) to adjust ButtonStyle.minimumSize before providing it (currently it is done automatically).
For the buttons M3 defaults it would be doable to adjust the values after querying the M3 defaults. But there are other usages where it will be difficult to do so.

So I opted for a documentation update that explains the current behavior because:

  • this is mainly a desktop issue.
  • there is a workaround which is to override the visual density.
  • while fixing this for ButtonStyle.minimumSize usages in the framework might be doable it will require updating several widgets and tests.
  • changing this behavior now will probably impact users in a way that won't be easy for them to identify (we can't provide a dart fix, the change will be visible in some platforms, ect).

Copy link
Contributor

@Piinks Piinks left a comment

Choose a reason for hiding this comment

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

LGTM - thanks for the detailed explanation. :)

@bleroux bleroux force-pushed the update_button_style_documentation branch from d71c7de to 45095a3 Compare May 21, 2025 07:12
@bleroux bleroux force-pushed the update_button_style_documentation branch from 2fa082c to 24a71aa Compare May 21, 2025 20:05
@bleroux bleroux added the autosubmit Merge PR when tree becomes green via auto submit App label May 22, 2025
@auto-submit auto-submit bot added this pull request to the merge queue May 22, 2025
Merged via the queue into flutter:master with commit e78b434 May 22, 2025
76 checks passed
@flutter-dashboard flutter-dashboard bot removed the autosubmit Merge PR when tree becomes green via auto submit App label May 22, 2025
engine-flutter-autoroll added a commit to engine-flutter-autoroll/packages that referenced this pull request May 22, 2025
engine-flutter-autoroll added a commit to engine-flutter-autoroll/packages that referenced this pull request May 22, 2025
engine-flutter-autoroll added a commit to engine-flutter-autoroll/packages that referenced this pull request May 22, 2025
engine-flutter-autoroll added a commit to engine-flutter-autoroll/packages that referenced this pull request May 23, 2025
engine-flutter-autoroll added a commit to engine-flutter-autoroll/packages that referenced this pull request May 23, 2025
auto-submit bot pushed a commit to flutter/packages that referenced this pull request May 23, 2025
Roll Flutter from 33cdd8ef31dc to 85564cbba9e7 (39 revisions)

flutter/flutter@33cdd8e...85564cb

2025-05-23 98614782+auto-submit[bot]@users.noreply.github.com Reverts "[Reland2] Implements UISceneDelegate dynamically w/ FlutterLaunchEngine (#169276)" (flutter/flutter#169347)
2025-05-23 engine-flutter-autoroll@skia.org Roll Skia from a01ea49f53a4 to 956fd8b14e22 (1 revision) (flutter/flutter#169334)
2025-05-23 engine-flutter-autoroll@skia.org Roll Dart SDK from 4de10a11ceb9 to 085f110ecf33 (1 revision) (flutter/flutter#169333)
2025-05-23 engine-flutter-autoroll@skia.org Roll Skia from bcc7e7fce10e to a01ea49f53a4 (1 revision) (flutter/flutter#169329)
2025-05-23 engine-flutter-autoroll@skia.org Roll Skia from 18b85aced9b7 to bcc7e7fce10e (3 revisions) (flutter/flutter#169323)
2025-05-23 engine-flutter-autoroll@skia.org Roll Dart SDK from 2a45b2f88a4f to 4de10a11ceb9 (2 revisions) (flutter/flutter#169322)
2025-05-23 matanlurey@users.noreply.github.com Remove patching of `package_config.json` from Flutter Pub wrapper. (flutter/flutter#169306)
2025-05-23 jsimionato@google.com Add missing dart_dynamic_modules flag for iOS DDM simulator builds (flutter/flutter#169254)
2025-05-23 engine-flutter-autoroll@skia.org Roll Skia from ea73ccdc1417 to 18b85aced9b7 (6 revisions) (flutter/flutter#169315)
2025-05-23 simonhadenius@gmail.com Add flag to exclude focus for hidden children in Visibility, maintainFocusability. Set maintainFocusability to false in IndexedStack (flutter/flutter#159133)
2025-05-23 30870216+gaaclarke@users.noreply.github.com [Reland2] Implements UISceneDelegate dynamically w/ FlutterLaunchEngine (flutter/flutter#169276)
2025-05-23 engine-flutter-autoroll@skia.org Roll Dart SDK from 8f85d89fdc23 to 2a45b2f88a4f (6 revisions) (flutter/flutter#169312)
2025-05-23 52160996+FMorschel@users.noreply.github.com Removes unnecessary parentheses (flutter/flutter#169015)
2025-05-22 danny@tuppeny.com Unpin test/test_core/test_api packages (flutter/flutter#169198)
2025-05-22 dkwingsmt@users.noreply.github.com [Engine] Fix an edge case of RoundSuperellipseParam::Contains with sharp corners (flutter/flutter#167977)
2025-05-22 victorsanniay@gmail.com Replace goldens in test/cupertino/nav_bar_transition_test.dart (flutter/flutter#169172)
2025-05-22 engine-flutter-autoroll@skia.org Roll Skia from 13a299964c9f to ea73ccdc1417 (35 revisions) (flutter/flutter#169303)
2025-05-22 danny@tuppeny.com Increase sub-task timeout for Mac web_tool_tests (flutter/flutter#169307)
2025-05-22 rmolivares@renzo-olivares.dev Fix crash on two finger selection gesture (flutter/flutter#168598)
2025-05-22 matanlurey@users.noreply.github.com Disable the ability to opt-out of `explicit-package-dependencies`. (flutter/flutter#169283)
2025-05-22 47866232+chunhtai@users.noreply.github.com Fixes tab semantics gets dropped if the child produce a semantics node (flutter/flutter#169233)
2025-05-22 matanlurey@users.noreply.github.com Skip `{PLAT}_web_tools_test#expression_evaluation_*_test.dart`, turning tree 🔴  (flutter/flutter#169305)
2025-05-22 matanlurey@users.noreply.github.com Update tool-internal `generateLocalizations...()` to never use synthetic (`flutter_gen`) packages (flutter/flutter#169285)
2025-05-22 98614782+auto-submit[bot]@users.noreply.github.com Reverts "Make `build_android_host_app_with_module_aar` build using an aar (#169171)" (flutter/flutter#169287)
2025-05-22 mdebbar@google.com Increase sub-task timeout for `web_tool_tests_1_2` (flutter/flutter#169277)
2025-05-22 mohellebiabdessalem@gmail.com refactor the usage of `MediaQuery.sizeOf(context).height` to use the new `.heightOf(context)` (flutter/flutter#168894)
2025-05-22 kevmoo@users.noreply.github.com [tool] Add --no-minify flag to JS Compiler (flutter/flutter#169102)
2025-05-22 bruno.leroux@gmail.com Update ButtonStyle documentation (flutter/flutter#168062)
2025-05-22 ybz975218925@live.com Fix the issue where DropdownMenu disposes of the controller. (flutter/flutter#168541)
2025-05-22 alex.medinsh@gmail.com Add bottomSheetScrimBuilder to Scaffold (flutter/flutter#167335)
2025-05-22 98614782+auto-submit[bot]@users.noreply.github.com Reverts "[Reland] Implements UISceneDelegate dynamically w/ FlutterLaunchEngine (#168396) (#168914)" (flutter/flutter#169250)
2025-05-21 engine-flutter-autoroll@skia.org Roll Dart SDK from 56940edd099d to 8f85d89fdc23 (6 revisions) (flutter/flutter#169237)
2025-05-21 kyle.finlinson@verygood.ventures Use gestureSettings.touchSlop in PrimaryPointerGestureRecognizer (flutter/flutter#161549)
2025-05-21 huy@nevercode.io Normalize BottomAppBarTheme (continue) (flutter/flutter#168966)
2025-05-21 30870216+gaaclarke@users.noreply.github.com [Reland] Implements UISceneDelegate dynamically w/ FlutterLaunchEngine (#168396) (flutter/flutter#168914)
2025-05-21 sarbagyastha@gmail.com Respect `calendarDelegate` in `showDateRangePicker` (flutter/flutter#168290)
2025-05-21 34871572+gmackall@users.noreply.github.com Make `build_android_host_app_with_module_aar` build using an aar (flutter/flutter#169171)
2025-05-21 jason-simmons@users.noreply.github.com Roll Dart SDK from 7c40eba6bf77 to 56940edd099d (flutter/flutter#169135)
2025-05-21 34465683+rkishan516@users.noreply.github.com Feat: Add full screen dialog support for dialog routes (flutter/flutter#167794)

If this roll has caused a breakage, revert this CL and stop the roller
using the controls here:
https://autoroll.skia.org/r/flutter-packages
Please CC muhatashim@google.com,stuartmorgan@google.com on the revert to ensure that a human
is aware of the problem.

...
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
f: material design flutter/packages/flutter/material repository. framework flutter/packages/flutter repository. See also f: labels. will affect goldens Changes to golden files
Projects
None yet
2 participants
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy