mirror of
https://github.com/flutter/flutter.git
synced 2026-02-20 02:29:02 +08:00
56 Commits
| Author | SHA1 | Message | Date | |
|---|---|---|---|---|
|
|
9d96df2364
|
Modernize framework lints (#179089)
WIP Commits separated as follows: - Update lints in analysis_options files - Run `dart fix --apply` - Clean up leftover analysis issues - Run `dart format .` in the right places. Local analysis and testing passes. Checking CI now. Part of https://github.com/flutter/flutter/issues/178827 - Adoption of flutter_lints in examples/api coming in a separate change (cc @loic-sharma) ## Pre-launch Checklist - [ ] I read the [Contributor Guide] and followed the process outlined there for submitting PRs. - [ ] I read the [Tree Hygiene] wiki page, which explains my responsibilities. - [ ] I read and followed the [Flutter Style Guide], including [Features we expect every widget to implement]. - [ ] I signed the [CLA]. - [ ] I listed at least one issue that this PR fixes in the description above. - [ ] I updated/added relevant documentation (doc comments with `///`). - [ ] I added new tests to check the change I am making, or this PR is [test-exempt]. - [ ] I followed the [breaking change policy] and added [Data Driven Fixes] where supported. - [ ] All existing and new tests are passing. If you need help, consider asking for advice on the #hackers-new channel on [Discord]. **Note**: The Flutter team is currently trialing the use of [Gemini Code Assist for GitHub](https://developers.google.com/gemini-code-assist/docs/review-github-code). Comments from the `gemini-code-assist` bot should not be taken as authoritative feedback from the Flutter team. If you find its comments useful you can update your code accordingly, but if you are unsure or disagree with the feedback, please feel free to wait for a Flutter team member's review for guidance on which automated comments should be addressed. <!-- Links --> [Contributor Guide]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#overview [Tree Hygiene]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md [test-exempt]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#tests [Flutter Style Guide]: https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md [Features we expect every widget to implement]: https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md#features-we-expect-every-widget-to-implement [CLA]: https://cla.developers.google.com/ [flutter/tests]: https://github.com/flutter/tests [breaking change policy]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#handling-breaking-changes [Discord]: https://github.com/flutter/flutter/blob/main/docs/contributing/Chat.md [Data Driven Fixes]: https://github.com/flutter/flutter/blob/main/docs/contributing/Data-driven-Fixes.md |
||
|
|
c30e5d4161
|
Make sure that a FilledButton doesn't crash in 0x0 environment (#175110)
This is my attempt to handle https://github.com/flutter/flutter/issues/6537 for the FilledButton widget. Co-authored-by: Tong Mu <dkwingsmt@users.noreply.github.com> |
||
|
|
46733c69fb
|
Fix FilledButton.icon and FilledButton.tonalIcon break focus traversal and VoiceOver (#177593)
## Description This PR changes `FilledButton.icon` and `FilledButton.tonalIcon` to avoid building a different widget. When a different widget is created the whole subtree is recreated which leads to various issues (Focus and A11y issues for instance). The change is similar to https://github.com/flutter/flutter/pull/175810 which fixed the exact same problem for `OutlinedButton.icon`. ## Related Issue [TextButton.icon breaks focus traversal and ink effect when toggling icon](https://github.com/flutter/flutter/issues/173944) [Voiceover focus traversal breaks if a button's state changes to include an icon](https://github.com/flutter/flutter/pull/175810) ## Tests - Adds 4 tests |
||
|
|
7fd228f31d
|
[Material] Change default mouse cursor of buttons to basic arrow instead of click (except on web) (#171796)
Changes default mouse cursor of Material buttons to basic arrow instead of click as per updated Android guidance. For each Material button, I did the following: 1. Changed the default mouse cursor to the basic arrow. 2. Added a way to configure the mouse cursor of the button if a method did not exist before. 3. Added a test to ensure that the default mouse cursor is now the basic arrow (or modified an existing one if applicable). 4. Added a test to ensure that the customization of button mouse cursors still works (if currently untested). The list of Material buttons I modified (supposed to be all of them): - RawMaterialButton - DropdownButton - FloatingActionButton - ToggleButtons - ElevatedButton - IconButton - FilledButton - OutlinedButton - PopupMenuItem - InkWell - TextButton - MaterialButton - DropdownMenuItem - DropdownButtonFormField - BackButton - CloseButton - DrawerButton - EndDrawerButton - PopupMenuButton - MenuItemButton - CheckboxMenuButton - RadioMenuButton - MenuBar - SubmenuButton - SegmentedButton - FilterChip - ChoiceChip - ActionChip - InputChip Fixes https://github.com/flutter/flutter/issues/170296. ## Pre-launch Checklist - [x] I read the [Contributor Guide] and followed the process outlined there for submitting PRs. - [x] I read the [Tree Hygiene] wiki page, which explains my responsibilities. - [x] I read and followed the [Flutter Style Guide], including [Features we expect every widget to implement]. - [x] I signed the [CLA]. - [x] I listed at least one issue that this PR fixes in the description above. - [x] I updated/added relevant documentation (doc comments with `///`). - [x] I added new tests to check the change I am making, or this PR is [test-exempt]. - [ ] I followed the [breaking change policy] and added [Data Driven Fixes] where supported. - [x] All existing and new tests are passing. If you need help, consider asking for advice on the #hackers-new channel on [Discord]. <!-- Links --> [Contributor Guide]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#overview [Tree Hygiene]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md [test-exempt]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#tests [Flutter Style Guide]: https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md [Features we expect every widget to implement]: https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md#features-we-expect-every-widget-to-implement [CLA]: https://cla.developers.google.com/ [flutter/tests]: https://github.com/flutter/tests [breaking change policy]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#handling-breaking-changes [Discord]: https://github.com/flutter/flutter/blob/main/docs/contributing/Chat.md [Data Driven Fixes]: https://github.com/flutter/flutter/blob/main/docs/contributing/Data-driven-Fixes.md --------- Co-authored-by: Tong Mu <dkwingsmt@users.noreply.github.com> |
||
|
|
2d20356c2a
|
Migrate to widget state (#175242)
Follow up of https://github.com/flutter/flutter/pull/174746 Migrate some files from `MaterialState` to `WidgetState`. This PR only focus on WidgetState for a subset of files. - This minimizes conflicts and reduces the size of the PR for easier reviews and follow up - I'll work on the other elements of `packages/flutter/lib/src/material/material_state.dart` into other PRs ## Pre-launch Checklist - [x] I read the [Contributor Guide] and followed the process outlined there for submitting PRs. - [x] I read the [Tree Hygiene] wiki page, which explains my responsibilities. - [x] I read and followed the [Flutter Style Guide], including [Features we expect every widget to implement]. - [x] I signed the [CLA]. - [ ] I listed at least one issue that this PR fixes in the description above. - [x] I updated/added relevant documentation (doc comments with `///`). - [x] I added new tests to check the change I am making, or this PR is [test-exempt]. - [x] I followed the [breaking change policy] and added [Data Driven Fixes] where supported. - [x] All existing and new tests are passing. If you need help, consider asking for advice on the #hackers-new channel on [Discord]. **Note**: The Flutter team is currently trialing the use of [Gemini Code Assist for GitHub](https://developers.google.com/gemini-code-assist/docs/review-github-code). Comments from the `gemini-code-assist` bot should not be taken as authoritative feedback from the Flutter team. If you find its comments useful you can update your code accordingly, but if you are unsure or disagree with the feedback, please feel free to wait for a Flutter team member's review for guidance on which automated comments should be addressed. <!-- Links --> [Contributor Guide]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#overview [Tree Hygiene]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md [test-exempt]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#tests [Flutter Style Guide]: https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md [Features we expect every widget to implement]: https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md#features-we-expect-every-widget-to-implement [CLA]: https://cla.developers.google.com/ [flutter/tests]: https://github.com/flutter/tests [breaking change policy]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#handling-breaking-changes [Discord]: https://github.com/flutter/flutter/blob/main/docs/contributing/Chat.md [Data Driven Fixes]: https://github.com/flutter/flutter/blob/main/docs/contributing/Data-driven-Fixes.md |
||
|
|
f0f208deae
|
Migrate more files to WidgetStateProperty (#174268)
Another batch of files migrated to use WidgetStateProperty Follow up of https://github.com/flutter/flutter/pull/174176 ## Pre-launch Checklist - [x] I read the [Contributor Guide] and followed the process outlined there for submitting PRs. - [x] I read the [Tree Hygiene] wiki page, which explains my responsibilities. - [x] I read and followed the [Flutter Style Guide], including [Features we expect every widget to implement]. - [x] I signed the [CLA]. - [ ] I listed at least one issue that this PR fixes in the description above. - [x] I updated/added relevant documentation (doc comments with `///`). - [ ] I added new tests to check the change I am making, or this PR is [test-exempt]. - [x] I followed the [breaking change policy] and added [Data Driven Fixes] where supported. - [x] All existing and new tests are passing. If you need help, consider asking for advice on the #hackers-new channel on [Discord]. **Note**: The Flutter team is currently trialing the use of [Gemini Code Assist for GitHub](https://developers.google.com/gemini-code-assist/docs/review-github-code). Comments from the `gemini-code-assist` bot should not be taken as authoritative feedback from the Flutter team. If you find its comments useful you can update your code accordingly, but if you are unsure or disagree with the feedback, please feel free to wait for a Flutter team member's review for guidance on which automated comments should be addressed. <!-- Links --> [Contributor Guide]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#overview [Tree Hygiene]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md [test-exempt]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#tests [Flutter Style Guide]: https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md [Features we expect every widget to implement]: https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md#features-we-expect-every-widget-to-implement [CLA]: https://cla.developers.google.com/ [flutter/tests]: https://github.com/flutter/tests [breaking change policy]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#handling-breaking-changes [Discord]: https://github.com/flutter/flutter/blob/main/docs/contributing/Chat.md [Data Driven Fixes]: https://github.com/flutter/flutter/blob/main/docs/contributing/Data-driven-Fixes.md |
||
|
|
a04fb324be
|
Bump Dart to 3.8 and reformat (#171703)
Bumps the Dart version to 3.8 across the repo (excluding engine/src/flutter/third_party) and applies formatting updates from Dart 3.8. ## Pre-launch Checklist - [x] I read the [Contributor Guide] and followed the process outlined there for submitting PRs. - [x] I read the [Tree Hygiene] wiki page, which explains my responsibilities. - [x] I read and followed the [Flutter Style Guide], including [Features we expect every widget to implement]. - [x] I signed the [CLA]. - [ ] I listed at least one issue that this PR fixes in the description above. - [ ] I updated/added relevant documentation (doc comments with `///`). - [x] I added new tests to check the change I am making, or this PR is [test-exempt]. - [x] I followed the [breaking change policy] and added [Data Driven Fixes] where supported. - [x] All existing and new tests are passing. If you need help, consider asking for advice on the #hackers-new channel on [Discord]. <!-- Links --> [Contributor Guide]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#overview [Tree Hygiene]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md [test-exempt]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#tests [Flutter Style Guide]: https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md [Features we expect every widget to implement]: https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md#features-we-expect-every-widget-to-implement [CLA]: https://cla.developers.google.com/ [flutter/tests]: https://github.com/flutter/tests [breaking change policy]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#handling-breaking-changes [Discord]: https://github.com/flutter/flutter/blob/main/docs/contributing/Chat.md [Data Driven Fixes]: https://github.com/flutter/flutter/blob/main/docs/contributing/Data-driven-Fixes.md |
||
|
|
ad9e8bf2ab
|
fix: outline appearing over child (#167615)
<!-- Thanks for filing a pull request! Reviewers are typically assigned within a week of filing a request. To learn more about code review, see our documentation on Tree Hygiene: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md --> This PR exposes `borderOnForeground` from the `Material` class to `ButtonStyle` and `OutlinedButton` class, letting the developer decide whether to show the border on foreground or background. Screenshot before this PR: <img width="212" alt="before" src="https://github.com/user-attachments/assets/5b23cdf8-bbd7-4bee-9b15-ee64aa941043" /> Screenshot after this PR: <img width="200" alt="after" src="https://github.com/user-attachments/assets/1d3f66c8-c2f2-4942-a92e-d890d3c65a22" /> fixes #167431 *If you had to change anything in the [flutter/tests] repo, include a link to the migration guide as per the [breaking change policy].* ## Pre-launch Checklist - [x] I read the [Contributor Guide] and followed the process outlined there for submitting PRs. - [x] I read the [Tree Hygiene] wiki page, which explains my responsibilities. - [x] I read and followed the [Flutter Style Guide], including [Features we expect every widget to implement]. - [x] I signed the [CLA]. - [x] I listed at least one issue that this PR fixes in the description above. - [x] I updated/added relevant documentation (doc comments with `///`). - [x] I added new tests to check the change I am making, or this PR is [test-exempt]. - [x] I followed the [breaking change policy] and added [Data Driven Fixes] where supported. - [x] All existing and new tests are passing. If you need help, consider asking for advice on the #hackers-new channel on [Discord]. <!-- Links --> [Contributor Guide]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#overview [Tree Hygiene]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md [test-exempt]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#tests [Flutter Style Guide]: https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md [Features we expect every widget to implement]: https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md#features-we-expect-every-widget-to-implement [CLA]: https://cla.developers.google.com/ [flutter/tests]: https://github.com/flutter/tests [breaking change policy]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#handling-breaking-changes [Discord]: https://github.com/flutter/flutter/blob/main/docs/contributing/Chat.md [Data Driven Fixes]: https://github.com/flutter/flutter/blob/main/docs/contributing/Data-driven-Fixes.md |
||
|
|
a8a61a1c06
|
Add button icon support for animation duration (#162667)
Fixes [Default foreground color animation duration doesn't apply on icon of `Button` widgets](https://github.com/flutter/flutter/issues/162301) Fixes [Implement similar widget to``AnimatedDefaultTextStyle`` but for child ``Icon``](https://github.com/flutter/flutter/issues/137251) ### Description This PR adds``AnimatedTheme` to `ButtonStyleButton` which is extended by buttons. It animates the button icon when changing icon color and size, similar to button text. ### Code Sample <details> <summary>expand to view the code sample</summary> ```dart import 'package:flutter/material.dart'; void main() => runApp(const MyApp()); class MyApp extends StatelessWidget { const MyApp({super.key}); @override Widget build(BuildContext context) { return const MaterialApp( home: HomePage(), ); } } class HomePage extends StatelessWidget { const HomePage({super.key}); @override Widget build(BuildContext context) { return Scaffold( body: Center( child: Column( mainAxisAlignment: MainAxisAlignment.center, spacing: 20, children: <Widget>[ ElevatedButton.icon( icon: const Icon(Icons.favorite_rounded, size: 50), label: const Text('Button', style: TextStyle(fontSize: 36)), onPressed: () {}, style: const ButtonStyle( iconColor: WidgetStateProperty<Color>.fromMap( <WidgetStatesConstraint, Color>{ WidgetState.pressed: Color(0XFFFF0000), WidgetState.any: Color(0XFF000000), }, ), foregroundColor: WidgetStateProperty<Color>.fromMap( <WidgetStatesConstraint, Color>{ WidgetState.pressed: Color(0XFFFF0000), WidgetState.any: Color(0XFF000000), }, ), ), ), ElevatedButton.icon( icon: const Icon(Icons.favorite_rounded, size: 50), label: const Text('Button', style: TextStyle(fontSize: 36)), onPressed: () {}, style: const ButtonStyle( animationDuration: Duration(seconds: 2), iconColor: WidgetStateProperty<Color>.fromMap( <WidgetStatesConstraint, Color>{ WidgetState.pressed: Color(0XFFFF0000), WidgetState.any: Color(0XFF000000), }, ), foregroundColor: WidgetStateProperty<Color>.fromMap( <WidgetStatesConstraint, Color>{ WidgetState.pressed: Color(0XFFFF0000), WidgetState.any: Color(0XFF000000), }, ), ), ) ], ), ), ); } } ``` </details> ### Before https://github.com/user-attachments/assets/86fcab94-1147-4c49-b362-12f804a5d540 ### After https://github.com/user-attachments/assets/12a49de8-06d6-46c5-976f-5ce182d60423 ## Pre-launch Checklist - [x] I read the [Contributor Guide] and followed the process outlined there for submitting PRs. - [x] I read the [Tree Hygiene] wiki page, which explains my responsibilities. - [x] I read and followed the [Flutter Style Guide], including [Features we expect every widget to implement]. - [x] I signed the [CLA]. - [x] I listed at least one issue that this PR fixes in the description above. - [ ] I updated/added relevant documentation (doc comments with `///`). - [x] I added new tests to check the change I am making, or this PR is [test-exempt]. - [ ] I followed the [breaking change policy] and added [Data Driven Fixes] where supported. - [x] All existing and new tests are passing. If you need help, consider asking for advice on the #hackers-new channel on [Discord]. <!-- Links --> [Contributor Guide]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#overview [Tree Hygiene]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md [test-exempt]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#tests [Flutter Style Guide]: https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md [Features we expect every widget to implement]: https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md#features-we-expect-every-widget-to-implement [CLA]: https://cla.developers.google.com/ [flutter/tests]: https://github.com/flutter/tests [breaking change policy]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#handling-breaking-changes [Discord]: https://github.com/flutter/flutter/blob/main/docs/contributing/Chat.md [Data Driven Fixes]: https://github.com/flutter/flutter/blob/main/docs/contributing/Data-driven-Fixes.md Co-authored-by: Qun Cheng <36861262+QuncCccccc@users.noreply.github.com> |
||
|
|
d261411b4c
|
Remove redundant useMaterial3: true (#163376)
<!-- Thanks for filing a pull request! Reviewers are typically assigned within a week of filing a request. To learn more about code review, see our documentation on Tree Hygiene: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md --> This PR removes redundant useMaterial3: true as described in https://github.com/flutter/flutter/issues/162818 *List which issues are fixed by this PR. You must list at least one issue. An issue is not required if the PR fixes something trivial like a typo.* - https://github.com/flutter/flutter/issues/162818 ## Pre-launch Checklist - [x] I read the [Contributor Guide] and followed the process outlined there for submitting PRs. - [x] I read the [Tree Hygiene] wiki page, which explains my responsibilities. - [x] I read and followed the [Flutter Style Guide], including [Features we expect every widget to implement]. - [x] I signed the [CLA]. - [x] I listed at least one issue that this PR fixes in the description above. - [x] I updated/added relevant documentation (doc comments with `///`). - [x] I added new tests to check the change I am making, or this PR is [test-exempt]. - [x] I followed the [breaking change policy] and added [Data Driven Fixes] where supported. - [ ] All existing and new tests are passing. If you need help, consider asking for advice on the #hackers-new channel on [Discord]. <!-- Links --> [Contributor Guide]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#overview [Tree Hygiene]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md [test-exempt]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#tests [Flutter Style Guide]: https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md [Features we expect every widget to implement]: https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md#features-we-expect-every-widget-to-implement [CLA]: https://cla.developers.google.com/ [flutter/tests]: https://github.com/flutter/tests [breaking change policy]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#handling-breaking-changes [Discord]: https://github.com/flutter/flutter/blob/main/docs/contributing/Chat.md [Data Driven Fixes]: https://github.com/flutter/flutter/blob/main/docs/contributing/Data-driven-Fixes.md --------- Co-authored-by: Qun Cheng <36861262+QuncCccccc@users.noreply.github.com> |
||
|
|
60d0bfcca4
|
Fix buttons with icons ignore provided foregroundColor (#162880)
Fixes [Flutter 3.27 and later breaks past styling and theming of icon color on buttons with icons](https://github.com/flutter/flutter/issues/162839) ### Description This PR fixes how the icon color is resolved in `ButtonStyleButton`. This was regressed in https://github.com/flutter/flutter/pull/143501. ### Code Sample (taken from issue) <details> <summary>expand to view the code sample</summary> ```dart import 'package:flutter/material.dart'; void main() => runApp(const MyApp()); final ButtonStyle filledButtonStyle = FilledButton.styleFrom( foregroundColor: Colors.red, backgroundColor: Colors.grey, ); final ButtonStyle elevatedButtonStyle = ElevatedButton.styleFrom( foregroundColor: Colors.orange.shade600, backgroundColor: Colors.blueGrey, ); final ButtonStyle outlinedButtonStyle = OutlinedButton.styleFrom( foregroundColor: Colors.lightBlue, ); final ButtonStyle textButtonStyle = TextButton.styleFrom( foregroundColor: Colors.green, ); final ButtonStyle segmentedButtonStyle = SegmentedButton.styleFrom( selectedForegroundColor: Colors.tealAccent.shade700, ); class MyApp extends StatelessWidget { const MyApp({super.key}); @override Widget build(BuildContext context) { return MaterialApp( debugShowCheckedModeBanner: false, home: const HomePage(), theme: ThemeData( filledButtonTheme: FilledButtonThemeData( style: filledButtonStyle, ), elevatedButtonTheme: ElevatedButtonThemeData( style: elevatedButtonStyle, ), outlinedButtonTheme: OutlinedButtonThemeData( style: outlinedButtonStyle, ), textButtonTheme: TextButtonThemeData( style: textButtonStyle, ), segmentedButtonTheme: SegmentedButtonThemeData( style: segmentedButtonStyle, ), ), ); } } class HomePage extends StatelessWidget { const HomePage({super.key}); @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar(title: const Text('Button Icon Color Issue')), body: Center( child: Column( children: [ Row( mainAxisAlignment: MainAxisAlignment.center, children: [ FilledButton.icon( label: const Text('Filled Themed'), icon: const Icon(Icons.add), onPressed: () {}, ), const SizedBox(width: 8), FilledButton.icon( style: filledButtonStyle.copyWith( foregroundColor: WidgetStateProperty.all(Colors.yellow), ), label: const Text('Filled Styled'), icon: const Icon(Icons.add), onPressed: () {}, ), ], ), const SizedBox(height: 8), Row( mainAxisAlignment: MainAxisAlignment.center, children: [ ElevatedButton.icon( label: const Text('Elevated Themed'), icon: const Icon(Icons.add), onPressed: () {}, ), const SizedBox(width: 8), ElevatedButton.icon( style: elevatedButtonStyle.copyWith( foregroundColor: WidgetStateProperty.all(Colors.lime), ), label: const Text('Elevated Styled'), icon: const Icon(Icons.add), onPressed: () {}, ), ], ), const SizedBox(height: 8), Row( mainAxisAlignment: MainAxisAlignment.center, children: [ OutlinedButton.icon( label: const Text('Outlined Themed'), icon: const Icon(Icons.add), onPressed: () {}, ), const SizedBox(width: 8), OutlinedButton.icon( style: outlinedButtonStyle.copyWith( foregroundColor: WidgetStateProperty.all(Colors.deepOrange), ), label: const Text('Outlined Styled'), icon: const Icon(Icons.add), onPressed: () {}, ), ], ), const SizedBox(height: 8), Row( mainAxisAlignment: MainAxisAlignment.center, children: [ TextButton.icon( label: const Text('Text Themed'), icon: const Icon(Icons.add), onPressed: () {}, ), const SizedBox(width: 8), TextButton.icon( style: textButtonStyle.copyWith( foregroundColor: WidgetStateProperty.all(Colors.pink), ), label: const Text('Text Styled'), icon: const Icon(Icons.add), onPressed: () {}, ), ], ), const SizedBox(height: 8), const SegmentedButtonShowcase(), ], ), ), ); } } class SegmentedButtonShowcase extends StatefulWidget { const SegmentedButtonShowcase({this.showOutlinedButton, super.key}); final bool? showOutlinedButton; @override State<SegmentedButtonShowcase> createState() => _SegmentedButtonShowcaseState(); } enum Calendar { day, week, month, year } class _SegmentedButtonShowcaseState extends State<SegmentedButtonShowcase> { Calendar _selected = Calendar.day; @override Widget build(BuildContext context) { return SegmentedButton<Calendar>( segments: const <ButtonSegment<Calendar>>[ ButtonSegment<Calendar>( value: Calendar.day, label: Text('Day'), icon: Icon(Icons.calendar_view_day), ), ButtonSegment<Calendar>( value: Calendar.week, icon: Icon(Icons.calendar_view_week), label: Text('Week'), ), ButtonSegment<Calendar>( value: Calendar.month, icon: Icon(Icons.calendar_view_month), label: Text('Mont'), ), ButtonSegment<Calendar>( value: Calendar.year, icon: Icon(Icons.calendar_today), label: Text('Year'), ), ], selected: <Calendar>{_selected}, onSelectionChanged: (Set<Calendar> selected) { setState(() { _selected = selected.first; }); }, ); } } ``` </details> ### Before <img width="631" alt="Screenshot 2025-02-07 at 17 45 46" src="https://github.com/user-attachments/assets/d40b1c4b-9952-4e11-8295-8a04bbaa7d74" /> ### After <img width="631" alt="Screenshot 2025-02-07 at 17 45 37" src="https://github.com/user-attachments/assets/d308756e-83f2-42da-bc8d-e958d9f4bec5" /> ## Pre-launch Checklist - [x] I read the [Contributor Guide] and followed the process outlined there for submitting PRs. - [x] I read the [Tree Hygiene] wiki page, which explains my responsibilities. - [x] I read and followed the [Flutter Style Guide], including [Features we expect every widget to implement]. - [x] I signed the [CLA]. - [x] I listed at least one issue that this PR fixes in the description above. - [x] I updated/added relevant documentation (doc comments with `///`). - [x] I added new tests to check the change I am making, or this PR is [test-exempt]. - [ ] I followed the [breaking change policy] and added [Data Driven Fixes] where supported. - [x] All existing and new tests are passing. If you need help, consider asking for advice on the #hackers-new channel on [Discord]. <!-- Links --> [Contributor Guide]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#overview [Tree Hygiene]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md [test-exempt]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#tests [Flutter Style Guide]: https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md [Features we expect every widget to implement]: https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md#features-we-expect-every-widget-to-implement [CLA]: https://cla.developers.google.com/ [flutter/tests]: https://github.com/flutter/tests [breaking change policy]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#handling-breaking-changes [Discord]: https://github.com/flutter/flutter/blob/main/docs/contributing/Chat.md [Data Driven Fixes]: https://github.com/flutter/flutter/blob/main/docs/contributing/Data-driven-Fixes.md |
||
|
|
5491c8c146
|
Auto-format Framework (#160545)
This auto-formats all *.dart files in the repository outside of the `engine` subdirectory and enforces that these files stay formatted with a presubmit check. **Reviewers:** Please carefully review all the commits except for the one titled "formatted". The "formatted" commit was auto-generated by running `dev/tools/format.sh -a -f`. The other commits were hand-crafted to prepare the repo for the formatting change. I recommend reviewing the commits one-by-one via the "Commits" tab and avoiding Github's "Files changed" tab as it will likely slow down your browser because of the size of this PR. --------- Co-authored-by: Kate Lovett <katelovett@google.com> Co-authored-by: LongCatIsLooong <31859944+LongCatIsLooong@users.noreply.github.com> |
||
|
|
9e2d9deb28
|
Add IconAlignment to ButtonStyle and styleFrom methods (#158503)
Fixes [Proposal to add iconAlignment to ButtonStyle](https://github.com/flutter/flutter/issues/153350) ### Description This PR refactors buttons `IconAlignment`, adds to `ButtonStyle` and `styleFrom` methods. Which makes it possible to customize iconAlignment same way as icon size and color in the `ButtonStyle`. ### Code sample <details> <summary>expand to view the code sample</summary> ```dart import 'package:flutter/material.dart'; enum StyleSegment { none, widgetButtonStyle, widgetStyleFrom, themeButtonStyle, themeStyleFrom } void main() => runApp(const MyApp()); class MyApp extends StatefulWidget { const MyApp({super.key}); @override State<MyApp> createState() => _MyAppState(); } class _MyAppState extends State<MyApp> { StyleSegment _selectedSegment = StyleSegment.none; ThemeData? getThemeStyle() => switch (_selectedSegment) { StyleSegment.themeButtonStyle => ThemeData( textButtonTheme: const TextButtonThemeData( style: ButtonStyle( iconAlignment: IconAlignment.end, ), ), elevatedButtonTheme: const ElevatedButtonThemeData( style: ButtonStyle( iconAlignment: IconAlignment.end, ), ), outlinedButtonTheme: const OutlinedButtonThemeData( style: ButtonStyle( iconAlignment: IconAlignment.end, ), ), filledButtonTheme: const FilledButtonThemeData( style: ButtonStyle( iconAlignment: IconAlignment.end, ), ), ), StyleSegment.themeStyleFrom => ThemeData( textButtonTheme: TextButtonThemeData( style: TextButton.styleFrom( iconAlignment: IconAlignment.end, ), ), elevatedButtonTheme: const ElevatedButtonThemeData( style: ButtonStyle( iconAlignment: IconAlignment.end, ), ), outlinedButtonTheme: const OutlinedButtonThemeData( style: ButtonStyle( iconAlignment: IconAlignment.end, ), ), filledButtonTheme: const FilledButtonThemeData( style: ButtonStyle( iconAlignment: IconAlignment.end, ), ), ), _ => null }; ButtonStyle? getTextButtonStyle() => switch (_selectedSegment) { StyleSegment.widgetStyleFrom => TextButton.styleFrom( iconAlignment: IconAlignment.end, ), StyleSegment.widgetButtonStyle => const ButtonStyle( iconAlignment: IconAlignment.end, ), _ => null }; ButtonStyle? getElevatedButtonStyle() => switch (_selectedSegment) { StyleSegment.widgetStyleFrom => ElevatedButton.styleFrom( iconAlignment: IconAlignment.end, ), StyleSegment.widgetButtonStyle => const ButtonStyle( iconAlignment: IconAlignment.end, ), _ => null }; ButtonStyle? getOutlinedButtonStyle() => switch (_selectedSegment) { StyleSegment.widgetStyleFrom => OutlinedButton.styleFrom( iconAlignment: IconAlignment.end, ), StyleSegment.widgetButtonStyle => const ButtonStyle( iconAlignment: IconAlignment.end, ), _ => null }; ButtonStyle? getFilledButtonStyle() => switch (_selectedSegment) { StyleSegment.widgetStyleFrom => FilledButton.styleFrom( iconAlignment: IconAlignment.end, ), StyleSegment.widgetButtonStyle => const ButtonStyle( iconAlignment: IconAlignment.end, ), _ => null }; @override Widget build(BuildContext context) { return MaterialApp( debugShowCheckedModeBanner: false, theme: getThemeStyle(), home: Scaffold( appBar: AppBar( title: const Text('ButtonStyle Icon Alignment'), ), body: Center( child: Padding( padding: const EdgeInsets.all(16.0), child: Column( mainAxisAlignment: MainAxisAlignment.center, spacing: 20, children: [ Wrap( spacing: 16, runSpacing: 16, children: [ TextButton.icon( style: getTextButtonStyle(), onPressed: () {}, icon: const Icon(Icons.add), label: const Text('Text Button'), ), ElevatedButton.icon( style: getElevatedButtonStyle(), onPressed: () {}, icon: const Icon(Icons.add), label: const Text('Elevated Button'), ), OutlinedButton.icon( style: getOutlinedButtonStyle(), onPressed: () {}, icon: const Icon(Icons.add), label: const Text('Outlined Button'), ), FilledButton.icon( style: getFilledButtonStyle(), onPressed: () {}, icon: const Icon(Icons.add), label: const Text('Filled Button'), ), FilledButton.tonalIcon( style: getFilledButtonStyle(), onPressed: () {}, icon: const Icon(Icons.add), label: const Text('Filled Button Tonal Icon'), ), ], ), StyleSelection( selectedSegment: _selectedSegment, onSegmentSelected: (StyleSegment segment) { setState(() { _selectedSegment = segment; }); }, ), ], ), ), ), ), ); } } class StyleSelection extends StatelessWidget { const StyleSelection( {super.key, this.selectedSegment = StyleSegment.none, required this.onSegmentSelected}); final ValueChanged<StyleSegment> onSegmentSelected; final StyleSegment selectedSegment; @override Widget build(BuildContext context) { return SegmentedButton<StyleSegment>( segments: const <ButtonSegment<StyleSegment>>[ ButtonSegment<StyleSegment>( value: StyleSegment.none, label: Text('None'), ), ButtonSegment<StyleSegment>( value: StyleSegment.widgetButtonStyle, label: Text('Widget Button Style'), ), ButtonSegment<StyleSegment>( value: StyleSegment.widgetStyleFrom, label: Text('Widget Style From'), ), ButtonSegment<StyleSegment>( value: StyleSegment.themeButtonStyle, label: Text('Theme Button Style'), ), ButtonSegment<StyleSegment>( value: StyleSegment.themeStyleFrom, label: Text('Theme Style From'), ), ], selected: <StyleSegment>{selectedSegment}, onSelectionChanged: (Set<StyleSegment> newSelection) { onSegmentSelected(newSelection.first); }, ); } } ``` </details> ### Preview <img width="1175" alt="Screenshot 2024-11-12 at 12 10 43" src="https://github.com/user-attachments/assets/a28207c5-0ef7-41fa-a45c-e9401df897a0"> ## Pre-launch Checklist - [x] I read the [Contributor Guide] and followed the process outlined there for submitting PRs. - [x] I read the [Tree Hygiene] wiki page, which explains my responsibilities. - [x] I read and followed the [Flutter Style Guide], including [Features we expect every widget to implement]. - [x] I signed the [CLA]. - [x] I listed at least one issue that this PR fixes in the description above. - [x] I updated/added relevant documentation (doc comments with `///`). - [x] I added new tests to check the change I am making, or this PR is [test-exempt]. - [ ] I followed the [breaking change policy] and added [Data Driven Fixes] where supported. - [x] All existing and new tests are passing. If you need help, consider asking for advice on the #hackers-new channel on [Discord]. <!-- Links --> [Contributor Guide]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#overview [Tree Hygiene]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md [test-exempt]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#tests [Flutter Style Guide]: https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md [Features we expect every widget to implement]: https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md#features-we-expect-every-widget-to-implement [CLA]: https://cla.developers.google.com/ [flutter/tests]: https://github.com/flutter/tests [breaking change policy]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#handling-breaking-changes [Discord]: https://github.com/flutter/flutter/blob/main/docs/contributing/Chat.md [Data Driven Fixes]: https://github.com/flutter/flutter/blob/main/docs/contributing/Data-driven-Fixes.md |
||
|
|
d5e843eca3
|
Fix missing icon props in button styleFrom methods (#154821)
Fixes [Add missing icon props in button `styleFrom` methods.](https://github.com/flutter/flutter/issues/154798) ### Description Add missing icon propers in the following widgets: - `ElevatedButton.styleFrom` (missing `iconSize`) - `FilledButton.styleFrom` (missing `iconSize`) - `OutlinedButton.styleFrom` (missing `iconSize`) - `TextButton.styleFrom` (missing `iconSize`) - `MenuItemButton.styleFrom` (missing `iconSize` and `disabledIconColor`) - `SubmenuButton.styleFrom` (missing `iconSize` and `disabledIconColor`) - `SegmentedButton.styleFrom` (missing `iconSize`, `iconColor`, and `disabledIconColor`) ### Code sample <details> <summary>expand to view the code sample</summary> ```dart import 'package:flutter/material.dart'; enum Calendar { day, week, month, year } void main() => runApp(const MyApp()); class MyApp extends StatefulWidget { const MyApp({super.key}); @override State<MyApp> createState() => _MyAppState(); } class _MyAppState extends State<MyApp> { Calendar calendarView = Calendar.week; bool isEnabled = true; @override Widget build(BuildContext context) { return MaterialApp( debugShowCheckedModeBanner: false, home: Scaffold( body: Center( child: Column( spacing: 10.0, mainAxisAlignment: MainAxisAlignment.center, children: <Widget>[ ElevatedButton.icon( style: ElevatedButton.styleFrom( iconSize: 30, iconColor: Colors.red, disabledIconColor: Colors.red.withValues(alpha: 0.5), ), onPressed: isEnabled ? () {} : null, icon: const Icon(Icons.add), label: const Text('ElevatedButton'), ), FilledButton.icon( style: ElevatedButton.styleFrom( iconSize: 30, iconColor: Colors.red, disabledIconColor: Colors.red.withValues(alpha: 0.5), ), onPressed: isEnabled ? () {} : null, icon: const Icon(Icons.add), label: const Text('FilledButton'), ), FilledButton.tonalIcon( style: ElevatedButton.styleFrom( iconSize: 30, iconColor: Colors.red, disabledIconColor: Colors.red.withValues(alpha: 0.5), ), onPressed: isEnabled ? () {} : null, icon: const Icon(Icons.add), label: const Text('Add'), ), OutlinedButton.icon( style: ElevatedButton.styleFrom( iconSize: 30, iconColor: Colors.red, disabledIconColor: Colors.red.withValues(alpha: 0.5), ), onPressed: isEnabled ? () {} : null, icon: const Icon(Icons.add), label: const Text('OutlinedButton'), ), TextButton.icon( style: ElevatedButton.styleFrom( iconSize: 30, iconColor: Colors.red, disabledIconColor: Colors.red.withValues(alpha: 0.5), ), onPressed: isEnabled ? () {} : null, icon: const Icon(Icons.add), label: const Text('TextButton'), ), SizedBox( width: 200, child: MenuItemButton( style: MenuItemButton.styleFrom( iconSize: 30, iconColor: Colors.red, disabledIconColor: Colors.red.withValues(alpha: 0.5), ), trailingIcon: const Icon(Icons.arrow_forward_ios), onPressed: isEnabled ? () {} : null, child: const Text('MenuItemButton'), ), ), SizedBox( width: 200, child: SubmenuButton( style: SubmenuButton.styleFrom( iconSize: 30, iconColor: Colors.red, disabledIconColor: Colors.red.withValues(alpha: 0.5), ), trailingIcon: const Icon(Icons.arrow_forward_ios), menuChildren: <Widget>[ if (isEnabled) const Text('Item'), ], child: const Text('SubmenuButton'), ), ), SegmentedButton<Calendar>( style: SegmentedButton.styleFrom( iconColor: Colors.red, iconSize: 30, disabledIconColor: Colors.red.withValues(alpha: 0.5), ), segments: const <ButtonSegment<Calendar>>[ ButtonSegment<Calendar>( value: Calendar.day, label: Text('Day'), icon: Icon(Icons.calendar_view_day)), ButtonSegment<Calendar>( value: Calendar.week, label: Text('Week'), icon: Icon(Icons.calendar_view_week)), ButtonSegment<Calendar>( value: Calendar.month, label: Text('Month'), icon: Icon(Icons.calendar_view_month)), ButtonSegment<Calendar>( value: Calendar.year, label: Text('Year'), icon: Icon(Icons.calendar_today)), ], selected: <Calendar>{calendarView}, onSelectionChanged: isEnabled ? (Set<Calendar> newSelection) {} : null, ) ], ), ), floatingActionButton: FloatingActionButton.extended( onPressed: () { setState(() { isEnabled = !isEnabled; }); }, label: Text(isEnabled ? 'Enabled' : 'Disabled'), ), ), ); } } ``` </details> ### Preview (Customized using icon props in `styleFrom` methods) <img width="838" alt="Screenshot 2024-09-09 at 16 27 19" src="https://github.com/user-attachments/assets/551d328b-307f-4f63-b0e8-1358a12877f9"> |
||
|
|
51ed348f3b
|
Fix handling of iconSize and iconColor defaults for ButtonStyleButton subclasses. (#143501)
## Description Adds defaults that use tokens to define default `iconSize` and `iconColor` values. Previously, the Material 3 token values for button icon sizes and colors were not being used as defaults when the `ButtonStyleButton.defaultStyleOf` function returned the default values. Adds tests to make sure appropriate `ButtonStyle` fields are populated when defaultStyle is called on buttons. Updated documentation for `defaultStyleOf` to indicated that not _all_ fields need to be non-null, since some fields make sense to be null (e.g. `fixedSize`) because they would otherwise override the behavior of other fields in the same `ButtonStyle`. ## Tests - Added tests to make sure that the appropriate fields are non-null in the default button styles for each type of button. |
||
|
|
d68e05bf36
|
Reland: Request focus if accessibility focus is given to a Focus widget (#142942) (#149840)
## Description This attempts to re-land #142942 after being reverted in https://github.com/flutter/flutter/pull/149741 because it broke the iOS [platform view UI integration test](https://github.com/flutter/flutter/blob/master/dev/integration_tests/ios_platform_view_tests/ios/PlatformViewUITests/PlatformViewUITests.m?rgh-link-date=2024-06-06T19%3A47%3A27Z). The changes here from the original are that in the Focus widget we no longer set the `onFocus` for the `Semantics` if the platform is iOS. It was not intended to do anything on iOS anyhow. Also, I updated the matchers to not actually do anything yet with the SemanticsAction.focus matching, so that this can be landed without breaking customer tests, and once they have been updated to correctly look for the focus action, we can land a PR that will turn it on. ## Related Issues - https://github.com/flutter/flutter/issues/149838 - https://github.com/flutter/flutter/issues/83809 - https://github.com/flutter/flutter/issues/149842 ## Tests - Updated framework tests to look for the appropriate things using the matchers, even though it doesn't actually test for them yet. |
||
|
|
ec9965bd89
|
Reverts "Request focus if SemanticsAction.focus is sent to a focusable widget (#142942)" (#149741)
Reverts: flutter/flutter#142942 Initiated by: zanderso Reason for reverting: Seems to have affected iOS platform view focus: https://ci.chromium.org/ui/p/flutter/builders/prod/Mac_ios%20native_platform_view_ui_tests_ios/10626/overview Original PR Author: gspencergoog Reviewed By: {yjbanov, goderbauer, chunhtai} This change reverts the following previous change: ## Description This causes the `Focus` widget to request focus on its focus node if the accessibility system (screen reader) focuses a widget via the `SemanticsAction.focus` action. ## Related Issues - https://github.com/flutter/flutter/issues/83809 ## Tests - Added a test to make sure that focus is requested when `SemanticsAction.focus` is sent by the engine. |
||
|
|
dd700e6d7c
|
Request focus if SemanticsAction.focus is sent to a focusable widget (#142942)
## Description This causes the `Focus` widget to request focus on its focus node if the accessibility system (screen reader) focuses a widget via the `SemanticsAction.focus` action. ## Related Issues - https://github.com/flutter/flutter/issues/83809 ## Tests - Added a test to make sure that focus is requested when `SemanticsAction.focus` is sent by the engine. |
||
|
|
0d8eafb006
|
Reland "Reland - Introduce tone-based surfaces and accent color add-ons - Part 2" (#144273) | ||
|
|
2eee0b5750
|
Reverts "Reland - Introduce tone-based surfaces and accent color add-ons - Part 2 (#144001)" (#144262)
Reverts flutter/flutter#144001
Initiated by: Piinks
Reason for reverting: Failing goldens at the tip of tree
Original PR Author: QuncCccccc
Reviewed By: {HansMuller}
This change reverts the following previous change:
Original Description:
Reverts flutter/flutter#143973
This is a reland for #138521 with an updated g3fix(cl/605555997). Local test: cl/609608958.
|
||
|
|
871d59221c
|
Reland - Introduce tone-based surfaces and accent color add-ons - Part 2 (#144001)
Reverts flutter/flutter#143973 This is a reland for #138521 with an updated g3fix(cl/605555997). Local test: cl/609608958. |
||
|
|
4715216c01
|
Revert "Introduce tone-based surfaces and accent color add-ons - Part 2" (#143973)
Reverts flutter/flutter#138521 |
||
|
|
a2c7ed95d1
|
Introduce tone-based surfaces and accent color add-ons - Part 2 (#138521)
This PR is to introduce 19 new color roles and deprecate 3 color roles in `ColorScheme`. **Tone-based surface colors** (7 colors): * surfaceBright * surfaceDim * surfaceContainer * surfaceContainerLowest * surfaceContainerLow * surfaceContainerHigh * surfaceContainerHighest **Accent color add-ons** (12 colors): * primary/secondary/tertiary-Fixed * primary/secondary/tertiary-FixedDim * onPrimary/onSecondary/onTertiary-Fixed * onPrimary/onSecondary/onTertiary-FixedVariant **Deprecated colors**: * background -> replaced with surface * onBackground -> replaced with onSurface * surfaceVariant -> replaced with surfaceContainerHighest Please checkout this [design doc](https://docs.google.com/document/d/1ODqivpM_6c490T4j5XIiWCDKo5YqHy78YEFqDm4S8h4/edit?usp=sharing) for more information:)  |
||
|
|
10442399fb
|
Introduce iconAlignment for the buttons with icon (#137348)
Adds `iconAlignment` property to `ButtonStyleButton` widget. Fixes #89564 ### Example https://github.com/flutter/flutter/assets/13456345/1b5236c4-5c60-4915-b3c6-0a56c43f8a19 |
||
|
|
310a7edbca
|
Reverts "Activate InkSparkle on CanvasKit" (#143036)
Reverts flutter/flutter#138545 Initiated by: zanderso Reason for reverting: Failing in post-submit: https://ci.chromium.org/ui/p/flutter/builders/prod/Linux%20web_long_running_tests_5_5/14975/overview ``` ══╡ EXCEPTION CAUGHT BY FLUTTER TEST FRAMEWORK ╞═════════════════ The following FormatException was thrown running a test: Invalid Shader Data When the exception was thrown, this was the stack: dart-sdk/lib/_internal/js_dev_runtime/private/ddc_runtime/errors.da Original PR Author: bleroux Reviewed By: {Piinks} This change reverts the following previous change: Original Description: ## Description This PR activates the M3 `InkSparkle` splash animation on Android + CanvasKit. Before it `InkSparkle` was only activated on native Android. ## Related Issue Fixes https://github.com/flutter/flutter/issues/138487 ## Tests Updates several existing tests. |
||
|
|
7f811fb444
|
Activate InkSparkle on CanvasKit (#138545)
## Description This PR activates the M3 `InkSparkle` splash animation on Android + CanvasKit. Before it `InkSparkle` was only activated on native Android. ## Related Issue Fixes https://github.com/flutter/flutter/issues/138487 ## Tests Updates several existing tests. |
||
|
|
c6f2cea65e
|
Reland: Added ButtonStyle.foregroundBuilder and ButtonStyle.backgroundBuilder (#142762)
Reland https://github.com/flutter/flutter/pull/141818 with a fix for a special case: If only `background` is specified for `TextButton.styleFrom` or `OutlinedButton.styleFrom` it applies the button's disabled state, i.e. as if the same value had been specified for disabledBackgroundColor. The change relative to #141818 is the indicated line below: ```dart final MaterialStateProperty<Color?>? backgroundColorProp = switch ((backgroundColor, disabledBackgroundColor)) { (null, null) => null, (_, null) => MaterialStatePropertyAll<Color?>(backgroundColor), // ADDED THIS LINE (_, _) => _TextButtonDefaultColor(backgroundColor, disabledBackgroundColor), }; ``` This backwards incompatibility cropped up in an internal test, see internal Google issue b/323399158. |
||
|
|
07ca92a69e
|
Reverts "Added ButtonStyle.foregroundBuilder and ButtonStyle.backgroundBuilder" (#142748)
Reverts flutter/flutter#141818 Initiated by: XilaiZhang This change reverts the following previous change: Original Description: Fixes https://github.com/flutter/flutter/issues/139456, https://github.com/flutter/flutter/issues/130335, https://github.com/flutter/flutter/issues/89563. Two new properties have been added to ButtonStyle to make it possible to insert arbitrary state-dependent widgets in a button's background or foreground. These properties can be specified for an individual button, using the style parameter, or for all buttons using a button theme's style parameter. The new ButtonStyle properties are `backgroundBuilder` and `foregroundBuilder` and their (function) types are: ```dart typedef ButtonLayerBuilder = Widget Function( BuildContext context, Set<MaterialState> states, Widget? child ); ``` The new builder functions are called whenever the button is built and the `states` parameter communicates the pressed/hovered/etc state fo the button. ## `backgroundBuilder` Creates a widget that becomes the child of the button's Material and whose child is the rest of the button, including the button's `child` parameter. By default the returned widget is clipped to the Material's ButtonStyle.shape. The `backgroundBuilder` can be used to add a gradient to the button's background. Here's an example that creates a yellow/orange gradient background:  ```dart TextButton( onPressed: () {}, style: TextButton.styleFrom( backgroundBuilder: (BuildContext context, Set<MaterialState> states, Widget? child) { return DecoratedBox( decoration: BoxDecoration( gradient: LinearGradient(colors: [Colors.orange, Colors.yellow]), ), child: child, ); }, ), child: Text('Text Button'), ) ``` Because the background widget becomes the child of the button's Material, if it's opaque (as it is in this case) then it obscures the overlay highlights which are painted on the button's Material. To ensure that the highlights show through one can decorate the background with an `Ink` widget. This version also overrides the overlay color to be (shades of) red, because that makes the highlights look a little nicer with the yellow/orange background.  ```dart TextButton( onPressed: () {}, style: TextButton.styleFrom( overlayColor: Colors.red, backgroundBuilder: (BuildContext context, Set<MaterialState> states, Widget? child) { return Ink( decoration: BoxDecoration( gradient: LinearGradient(colors: [Colors.orange, Colors.yellow]), ), child: child, ); }, ), child: Text('Text Button'), ) ``` Now the button's overlay highlights are painted on the Ink widget. An Ink widget isn't needed if the background is sufficiently translucent. This version of the example creates a translucent backround widget.  ```dart TextButton( onPressed: () {}, style: TextButton.styleFrom( overlayColor: Colors.red, backgroundBuilder: (BuildContext context, Set<MaterialState> states, Widget? child) { return DecoratedBox( decoration: BoxDecoration( gradient: LinearGradient(colors: [ Colors.orange.withOpacity(0.5), Colors.yellow.withOpacity(0.5), ]), ), child: child, ); }, ), child: Text('Text Button'), ) ``` One can also decorate the background with an image. In this example, the button's background is an burlap texture image. The foreground color has been changed to black to make the button's text a little clearer relative to the mottled brown backround.  ```dart TextButton( onPressed: () {}, style: TextButton.styleFrom( foregroundColor: Colors.black, backgroundBuilder: (BuildContext context, Set<MaterialState> states, Widget? child) { return Ink( decoration: BoxDecoration( image: DecorationImage( image: NetworkImage(burlapUrl), fit: BoxFit.cover, ), ), child: child, ); }, ), child: Text('Text Button'), ) ``` The background widget can depend on the `states` parameter. In this example the blue/orange gradient flips horizontally when the button is hovered/pressed.  ```dart TextButton( onPressed: () {}, style: TextButton.styleFrom( backgroundBuilder: (BuildContext context, Set<MaterialState> states, Widget? child) { final Color color1 = Colors.blue.withOpacity(0.5); final Color color2 = Colors.orange.withOpacity(0.5); return DecoratedBox( decoration: BoxDecoration( gradient: LinearGradient( colors: switch (states.contains(MaterialState.hovered)) { true => <Color>[color1, color2], false => <Color>[color2, color1], }, ), ), child: child, ); }, ), child: Text('Text Button'), ) ``` The preceeding examples have not included a BoxDecoration border because ButtonStyle already supports `ButtonStyle.shape` and `ButtonStyle.side` parameters that can be uesd to define state-dependent borders. Borders defined with the ButtonStyle side parameter match the button's shape. To add a border that changes color when the button is hovered or pressed, one must specify the side property using `copyWith`, since there's no `styleFrom` shorthand for this case.  ```dart TextButton( onPressed: () {}, style: TextButton.styleFrom( foregroundColor: Colors.indigo, backgroundBuilder: (BuildContext context, Set<MaterialState> states, Widget? child) { final Color color1 = Colors.blue.withOpacity(0.5); final Color color2 = Colors.orange.withOpacity(0.5); return DecoratedBox( decoration: BoxDecoration( gradient: LinearGradient( colors: switch (states.contains(MaterialState.hovered)) { true => <Color>[color1, color2], false => <Color>[color2, color1], }, ), ), child: child, ); }, ).copyWith( side: MaterialStateProperty.resolveWith<BorderSide?>((Set<MaterialState> states) { if (states.contains(MaterialState.hovered)) { return BorderSide(width: 3, color: Colors.yellow); } return null; // defer to the default }), ), child: Text('Text Button'), ) ``` Although all of the examples have created a ButtonStyle locally and only applied it to one button, they could have configured the `ThemeData.textButtonTheme` instead and applied the style to all TextButtons. And, of course, all of this works for all of the ButtonStyleButton classes, not just TextButton. ## `foregroundBuilder` Creates a Widget that contains the button's child parameter. The returned widget is clipped by the button's [ButtonStyle.shape] inset by the button's [ButtonStyle.padding] and aligned by the button's [ButtonStyle.alignment]. The `foregroundBuilder` can be used to wrap the button's child, e.g. with a border or a `ShaderMask` or as a state-dependent substitute for the child. This example adds a border that's just applied to the child. The border only appears when the button is hovered/pressed.  ```dart ElevatedButton( onPressed: () {}, style: ElevatedButton.styleFrom( foregroundBuilder: (BuildContext context, Set<MaterialState> states, Widget? child) { final ColorScheme colorScheme = Theme.of(context).colorScheme; return DecoratedBox( decoration: BoxDecoration( border: states.contains(MaterialState.hovered) ? Border(bottom: BorderSide(color: colorScheme.primary)) : Border(), // essentially "no border" ), child: child, ); }, ), child: Text('Text Button'), ) ``` The foregroundBuilder can be used with `ShaderMask` to change the way the button's child is rendered. In this example the ShaderMask's gradient causes the button's child to fade out on top.  ```dart ElevatedButton( onPressed: () { }, style: ElevatedButton.styleFrom( foregroundBuilder: (BuildContext context, Set<MaterialState> states, Widget? child) { final ColorScheme colorScheme = Theme.of(context).colorScheme; return ShaderMask( shaderCallback: (Rect bounds) { return LinearGradient( begin: Alignment.bottomCenter, end: Alignment.topCenter, colors: <Color>[ colorScheme.primary, colorScheme.primaryContainer, ], ).createShader(bounds); }, blendMode: BlendMode.srcATop, child: child, ); }, ), child: const Text('Elevated Button'), ) ``` A commonly requested configuration for butttons has the developer provide images, one for pressed/hovered/normal state. You can use the foregroundBuilder to create a button that fades between a normal image and another image when the button is pressed. In this case the foregroundBuilder doesn't use the child it's passed, even though we've provided the required TextButton child parameter.  ```dart TextButton( onPressed: () {}, style: TextButton.styleFrom( foregroundBuilder: (BuildContext context, Set<MaterialState> states, Widget? child) { final String url = states.contains(MaterialState.pressed) ? smiley2Url : smiley1Url; return AnimatedContainer( width: 100, height: 100, duration: Duration(milliseconds: 300), decoration: BoxDecoration( image: DecorationImage( image: NetworkImage(url), fit: BoxFit.contain, ), ), ); }, ), child: Text('No Child'), ) ``` In this example the button's default overlay appears when the button is hovered and pressed. Another image can be used to indicate the hovered state and the default overlay can be defeated by specifying `Colors.transparent` for the `overlayColor`:  ```dart TextButton( onPressed: () {}, style: TextButton.styleFrom( overlayColor: Colors.transparent, foregroundBuilder: (BuildContext context, Set<MaterialState> states, Widget? child) { String url = states.contains(MaterialState.hovered) ? smiley3Url : smiley1Url; if (states.contains(MaterialState.pressed)) { url = smiley2Url; } return AnimatedContainer( width: 100, height: 100, duration: Duration(milliseconds: 300), decoration: BoxDecoration( image: DecorationImage( image: NetworkImage(url), fit: BoxFit.contain, ), ), ); }, ), child: Text('No Child'), ) ``` |
||
|
|
2652b9a305
|
Convert button .icon and .tonalIcon constructors to take nullable icons. (#142644)
## Description This changes the factory constructors for `TextButton.icon`, `ElevatedButton.icon`, `FilledButton.icon`, and `FilledButton.tonalIcon` to take nullable icons. If the icon is null, then the "regular" version of the button is created. ## Tests - Added tests for all four constructors. |
||
|
|
ff6c8f5d37
|
Added ButtonStyle.foregroundBuilder and ButtonStyle.backgroundBuilder (#141818)
Fixes https://github.com/flutter/flutter/issues/139456, https://github.com/flutter/flutter/issues/130335, https://github.com/flutter/flutter/issues/89563. Two new properties have been added to ButtonStyle to make it possible to insert arbitrary state-dependent widgets in a button's background or foreground. These properties can be specified for an individual button, using the style parameter, or for all buttons using a button theme's style parameter. The new ButtonStyle properties are `backgroundBuilder` and `foregroundBuilder` and their (function) types are: ```dart typedef ButtonLayerBuilder = Widget Function( BuildContext context, Set<MaterialState> states, Widget? child ); ``` The new builder functions are called whenever the button is built and the `states` parameter communicates the pressed/hovered/etc state fo the button. ## `backgroundBuilder` Creates a widget that becomes the child of the button's Material and whose child is the rest of the button, including the button's `child` parameter. By default the returned widget is clipped to the Material's ButtonStyle.shape. The `backgroundBuilder` can be used to add a gradient to the button's background. Here's an example that creates a yellow/orange gradient background:  ```dart TextButton( onPressed: () {}, style: TextButton.styleFrom( backgroundBuilder: (BuildContext context, Set<MaterialState> states, Widget? child) { return DecoratedBox( decoration: BoxDecoration( gradient: LinearGradient(colors: [Colors.orange, Colors.yellow]), ), child: child, ); }, ), child: Text('Text Button'), ) ``` Because the background widget becomes the child of the button's Material, if it's opaque (as it is in this case) then it obscures the overlay highlights which are painted on the button's Material. To ensure that the highlights show through one can decorate the background with an `Ink` widget. This version also overrides the overlay color to be (shades of) red, because that makes the highlights look a little nicer with the yellow/orange background.  ```dart TextButton( onPressed: () {}, style: TextButton.styleFrom( overlayColor: Colors.red, backgroundBuilder: (BuildContext context, Set<MaterialState> states, Widget? child) { return Ink( decoration: BoxDecoration( gradient: LinearGradient(colors: [Colors.orange, Colors.yellow]), ), child: child, ); }, ), child: Text('Text Button'), ) ``` Now the button's overlay highlights are painted on the Ink widget. An Ink widget isn't needed if the background is sufficiently translucent. This version of the example creates a translucent backround widget.  ```dart TextButton( onPressed: () {}, style: TextButton.styleFrom( overlayColor: Colors.red, backgroundBuilder: (BuildContext context, Set<MaterialState> states, Widget? child) { return DecoratedBox( decoration: BoxDecoration( gradient: LinearGradient(colors: [ Colors.orange.withOpacity(0.5), Colors.yellow.withOpacity(0.5), ]), ), child: child, ); }, ), child: Text('Text Button'), ) ``` One can also decorate the background with an image. In this example, the button's background is an burlap texture image. The foreground color has been changed to black to make the button's text a little clearer relative to the mottled brown backround.  ```dart TextButton( onPressed: () {}, style: TextButton.styleFrom( foregroundColor: Colors.black, backgroundBuilder: (BuildContext context, Set<MaterialState> states, Widget? child) { return Ink( decoration: BoxDecoration( image: DecorationImage( image: NetworkImage(burlapUrl), fit: BoxFit.cover, ), ), child: child, ); }, ), child: Text('Text Button'), ) ``` The background widget can depend on the `states` parameter. In this example the blue/orange gradient flips horizontally when the button is hovered/pressed.  ```dart TextButton( onPressed: () {}, style: TextButton.styleFrom( backgroundBuilder: (BuildContext context, Set<MaterialState> states, Widget? child) { final Color color1 = Colors.blue.withOpacity(0.5); final Color color2 = Colors.orange.withOpacity(0.5); return DecoratedBox( decoration: BoxDecoration( gradient: LinearGradient( colors: switch (states.contains(MaterialState.hovered)) { true => <Color>[color1, color2], false => <Color>[color2, color1], }, ), ), child: child, ); }, ), child: Text('Text Button'), ) ``` The preceeding examples have not included a BoxDecoration border because ButtonStyle already supports `ButtonStyle.shape` and `ButtonStyle.side` parameters that can be uesd to define state-dependent borders. Borders defined with the ButtonStyle side parameter match the button's shape. To add a border that changes color when the button is hovered or pressed, one must specify the side property using `copyWith`, since there's no `styleFrom` shorthand for this case.  ```dart TextButton( onPressed: () {}, style: TextButton.styleFrom( foregroundColor: Colors.indigo, backgroundBuilder: (BuildContext context, Set<MaterialState> states, Widget? child) { final Color color1 = Colors.blue.withOpacity(0.5); final Color color2 = Colors.orange.withOpacity(0.5); return DecoratedBox( decoration: BoxDecoration( gradient: LinearGradient( colors: switch (states.contains(MaterialState.hovered)) { true => <Color>[color1, color2], false => <Color>[color2, color1], }, ), ), child: child, ); }, ).copyWith( side: MaterialStateProperty.resolveWith<BorderSide?>((Set<MaterialState> states) { if (states.contains(MaterialState.hovered)) { return BorderSide(width: 3, color: Colors.yellow); } return null; // defer to the default }), ), child: Text('Text Button'), ) ``` Although all of the examples have created a ButtonStyle locally and only applied it to one button, they could have configured the `ThemeData.textButtonTheme` instead and applied the style to all TextButtons. And, of course, all of this works for all of the ButtonStyleButton classes, not just TextButton. ## `foregroundBuilder` Creates a Widget that contains the button's child parameter. The returned widget is clipped by the button's [ButtonStyle.shape] inset by the button's [ButtonStyle.padding] and aligned by the button's [ButtonStyle.alignment]. The `foregroundBuilder` can be used to wrap the button's child, e.g. with a border or a `ShaderMask` or as a state-dependent substitute for the child. This example adds a border that's just applied to the child. The border only appears when the button is hovered/pressed.  ```dart ElevatedButton( onPressed: () {}, style: ElevatedButton.styleFrom( foregroundBuilder: (BuildContext context, Set<MaterialState> states, Widget? child) { final ColorScheme colorScheme = Theme.of(context).colorScheme; return DecoratedBox( decoration: BoxDecoration( border: states.contains(MaterialState.hovered) ? Border(bottom: BorderSide(color: colorScheme.primary)) : Border(), // essentially "no border" ), child: child, ); }, ), child: Text('Text Button'), ) ``` The foregroundBuilder can be used with `ShaderMask` to change the way the button's child is rendered. In this example the ShaderMask's gradient causes the button's child to fade out on top.  ```dart ElevatedButton( onPressed: () { }, style: ElevatedButton.styleFrom( foregroundBuilder: (BuildContext context, Set<MaterialState> states, Widget? child) { final ColorScheme colorScheme = Theme.of(context).colorScheme; return ShaderMask( shaderCallback: (Rect bounds) { return LinearGradient( begin: Alignment.bottomCenter, end: Alignment.topCenter, colors: <Color>[ colorScheme.primary, colorScheme.primaryContainer, ], ).createShader(bounds); }, blendMode: BlendMode.srcATop, child: child, ); }, ), child: const Text('Elevated Button'), ) ``` A commonly requested configuration for butttons has the developer provide images, one for pressed/hovered/normal state. You can use the foregroundBuilder to create a button that fades between a normal image and another image when the button is pressed. In this case the foregroundBuilder doesn't use the child it's passed, even though we've provided the required TextButton child parameter.  ```dart TextButton( onPressed: () {}, style: TextButton.styleFrom( foregroundBuilder: (BuildContext context, Set<MaterialState> states, Widget? child) { final String url = states.contains(MaterialState.pressed) ? smiley2Url : smiley1Url; return AnimatedContainer( width: 100, height: 100, duration: Duration(milliseconds: 300), decoration: BoxDecoration( image: DecorationImage( image: NetworkImage(url), fit: BoxFit.contain, ), ), ); }, ), child: Text('No Child'), ) ``` In this example the button's default overlay appears when the button is hovered and pressed. Another image can be used to indicate the hovered state and the default overlay can be defeated by specifying `Colors.transparent` for the `overlayColor`:  ```dart TextButton( onPressed: () {}, style: TextButton.styleFrom( overlayColor: Colors.transparent, foregroundBuilder: (BuildContext context, Set<MaterialState> states, Widget? child) { String url = states.contains(MaterialState.hovered) ? smiley3Url : smiley1Url; if (states.contains(MaterialState.pressed)) { url = smiley2Url; } return AnimatedContainer( width: 100, height: 100, duration: Duration(milliseconds: 300), decoration: BoxDecoration( image: DecorationImage( image: NetworkImage(url), fit: BoxFit.contain, ), ), ); }, ), child: Text('No Child'), ) ``` |
||
|
|
505845c5ac
|
Remove textScaleFactor references from flutter/flutter (#142271)
These should the the last remaining `MediaQueryData.textScaleFactor` and `TextScaler.textScaleFactor` references. |
||
|
|
64a732740d
|
[Fix] Consistency in ButtonStyleButton related Tests (#140610)
[Fix] Consistency in ButtonStyleButton related Tests: - Replaced the usage of ElevatedButton with FilledButton in FilledButton's test. - Replaced the usage of TextButton.styleFrom with FilledButton.styleFrom in FilledButton's test. - Replaced the usage of TextButton.styleFrom with ElevatedButton.styleFrom in ElevatedButton's test. |
||
|
|
baf739c8e6
|
Remove usage of testWidgetsWithLeakTracking. (#140239) | ||
|
|
075b9f763f
|
Update ButtonStyleButton.scaledPadding documentation. Migrate callers in flutter/flutter (#139014)
Fixes https://github.com/flutter/flutter/issues/138547. It makes more sense to me for the default padding values to use the scaled font sizes instead of the `textScaleFactor`. |
||
|
|
ad05949971
|
Fix flakiness: finalize dropped gestures in tests to release resources, and update doc-comment. (#136136) | ||
|
|
56cbf3e1d9
|
Cover more test/widgets tests with leak tracking #5 (#134869) | ||
|
|
219efce7f1
|
Cover more tests with leak tracking. (#134363) | ||
|
|
a7dbec31f1
|
Cover more tests with leak tracking. (#133958) | ||
|
|
a7b69b069f
|
Unpin leak_tracker and handle breaking changes in API. (#132352) | ||
|
|
f4c25bbb35
|
Revert "Handle breaking changes in leak_tracker." (#132223)
Reverts flutter/flutter#131998 Reverting for https://github.com/flutter/flutter/issues/132222 |
||
|
|
acd636f7ba
|
Handle breaking changes in leak_tracker. (#131998) | ||
|
|
f054f5aa09
|
Move mock canvas to flutter_test (#131631)
Fixes https://github.com/flutter/flutter/issues/59413 This relocates `mock_canvas.dart` and `recording_canvas.dart` from `flutter/test/rendering` to `flutter_test`. The testing functionality afforded by mock_canvas should be available to everyone, not just the framework. :) mock_canvas.dart needed a bit of cleanup - things like formatting and super parameters. |
||
|
|
e8b397caca
|
Setup leak tracking regression for material. (#130169) | ||
|
|
c5a81d1b35
|
Update button tests for Material 3 by default (#128628) | ||
|
|
4e7e4512b6
|
Reorder materialStateProperty defaults (#125905)
Fixes #122250. This PR is to make sure all the MaterialStateProperty defaults are able to correctly resolve different states. * When a widget is pressed, it is also hovered, so we need to put the `MaterialState.pressed` check before `MaterialState.hovered`. * When a widget is focused, the widget should still be able to be hovered, so we should check `MaterialState.hovered` before `MaterialState.focused`. * There are also cases like in _InputDecoratorDefaultsM3, the `MaterialState.disabled` should be checked before `MaterialState.error`. the order should be disabled, (error), pressed, hovered, focused. |
||
|
|
d4f884e000
|
Make selectable text mouse cursor configurable (#125133)
## Description This PR introduces `DefaultSelectionStyle.mouseCursor` to configure the mouse cursor over selectable text. It also applies this solution to `InkResponse` to make the mouse cursor win over the default one provided by selectable `Text` for many Material components (such as buttons). ### Before https://user-images.githubusercontent.com/840911/233627729-ddf98e2a-444d-4c6d-a6d5-f521982f48dd.mov ### After https://user-images.githubusercontent.com/840911/233627718-8871a68f-d33c-44cf-b4a1-91bb1fcdf076.mov ## Related Issue Fixes https://github.com/flutter/flutter/issues/104595 ## Tests Adds 6 tests. |
||
|
|
9241426828
|
Revert "Revert "[Re-land#2] Button padding M3 (#119498)" (#119597)" (#119656)
This reverts commit 7ba440655a801e50e1c02117beedeb2923391b6c. |
||
|
|
7ba440655a
|
Revert "[Re-land#2] Button padding M3 (#119498)" (#119597)
This reverts commit 530c3f2d13bae3c45510ae5e4a0d9a5cd987a5aa. |
||
|
|
530c3f2d13
|
[Re-land#2] Button padding M3 (#119498)
* init scaled changes * add correct padding values for M3 * revert unneeded change * Update packages/flutter/lib/src/material/text_button.dart Co-authored-by: Pierre-Louis <6655696+guidezpl@users.noreply.github.com> * Update packages/flutter/lib/src/material/text_button.dart Co-authored-by: Pierre-Louis <6655696+guidezpl@users.noreply.github.com> * comment fixes * test update * docstring fixes * e44a0de4c Roll Fuchsia Mac SDK from JLTTlcNPJeScjSO2B... to FeFYsNPy64-PEXPer... (flutter/engine#38558) (#117779) * Roll Plugins from e11cb245bb8e to 2d66f30e5825 (2 revisions) (#117781) * 417b37009 Roll Flutter from ae292cc4e5e4 to 17482fd425ee (28 revisions) (flutter/plugins#6889) * 2d66f30e5 [webview_flutter_web] Adds auto registration of the `WebViewPlatform` implementation (flutter/plugins#6886) * 4dd8a694f Roll Skia from cc3e0cd0a743 to c776239198f7 (1 revision) (flutter/engine#38560) (#117783) * 3460f349b [fuchsia] Set presentation interval (flutter/engine#38549) (#117785) * Roll Flutter Engine from 3460f349b01d to 1752b5b84680 (2 revisions) (#117788) * 332c0a2f2 Roll Skia from c776239198f7 to 13435162b783 (1 revision) (flutter/engine#38561) * 1752b5b84 Roll Dart SDK from 7f154f949aaf to fa6cf7241184 (2 revisions) (flutter/engine#38563) * a63bd854a [fuchsia] Add trace flow for Flatland::Present (flutter/engine#38565) (#117790) * Roll Flutter Engine from a63bd854ac5a to 5713a216076f (2 revisions) (#117795) * e012dc825 [Windows] Add engine builder to simplify tests (flutter/engine#38546) * 5713a2160 Revert "[web] Don't overwrite editing state with semantic updates (#38271)" (flutter/engine#38562) * Roll Flutter Engine from 5713a216076f to 780082203ea9 (2 revisions) (#117797) * fd94b04b1 [Impeller Scene] Import skinned mesh vertex data (flutter/engine#38554) * 780082203 Roll Fuchsia Linux SDK from gnyHyot4AZp7HZgUI... to KCm_e3N4gosNuY4IW... (flutter/engine#38568) * 9095f7a8b Roll Dart SDK from fa6cf7241184 to 224ac5ed9c66 (1 revision) (flutter/engine#38569) (#117799) * 0118b461b Roll Fuchsia Mac SDK from FeFYsNPy64-PEXPer... to 2lzQU8FEjR5AkOr4d... (flutter/engine#38571) (#117800) * e03d7c8bb Roll Skia from 13435162b783 to 9e8f31e3020c (3 revisions) (flutter/engine#38572) (#117802) * af6078b5f Roll Skia from 9e8f31e3020c to 486deb23bc2a (2 revisions) (flutter/engine#38574) (#117804) * 7e5cc7bb6 Roll Dart SDK from 224ac5ed9c66 to 9f0d8b9f20da (1 revision) (flutter/engine#38575) (#117805) * d4a04a538 Roll Fuchsia Linux SDK from KCm_e3N4gosNuY4IW... to IApTRqW8UUSWAOcqA... (flutter/engine#38578) (#117817) * b202b3db9 Roll Flutter from 17482fd425ee to d2127ad344e8 (14 revisions) (flutter/plugins#6892) (#117824) * Roll Flutter Engine from d4a04a538050 to 9153966bcb06 (2 revisions) (#117830) * 53806fa1e Roll Fuchsia Mac SDK from 2lzQU8FEjR5AkOr4d... to Bewt-eq7gNu6sU_Ob... (flutter/engine#38579) * 9153966bc [fuchsia] Bump the target API level to 11 (flutter/engine#38544) * b9bf51d16 Roll Dart SDK from 9f0d8b9f20da to 881c0b56a1f7 (1 revision) (flutter/engine#38580) (#117832) * Roll Flutter Engine from b9bf51d16f25 to f6ad9b6d00e3 (2 revisions) (#117834) * 4b38736e7 [Impeller Scene] Import materials, load embedded textures (flutter/engine#38577) * f6ad9b6d0 Roll Fuchsia Linux SDK from IApTRqW8UUSWAOcqA... to CXcPP_JZKQbSu2eIP... (flutter/engine#38581) * 932591ec0 Roll Fuchsia Linux SDK from CXcPP_JZKQbSu2eIP... to PkN8FdI4aC9z7W4mI... (flutter/engine#38584) (#117840) * 3d8c5ef10 Roll Fuchsia Linux SDK from PkN8FdI4aC9z7W4mI... to OOL-jWRElkQ2P3vJz... (flutter/engine#38585) (#117846) * Roll Flutter Engine from 3d8c5ef1060c to a7decc3e459b (2 revisions) (#117856) * 3470fa848 Roll Skia from 486deb23bc2a to a31d9c3b4583 (2 revisions) (flutter/engine#38586) * a7decc3e4 Roll Skia from a31d9c3b4583 to 01aeec883a43 (4 revisions) (flutter/engine#38587) * 0a2029cf3 Roll Fuchsia Linux SDK from OOL-jWRElkQ2P3vJz... to AE3lAqTc632VsY14L... (flutter/engine#38588) (#117858) * 5fe7d5b4e Roll Skia from 01aeec883a43 to 2ffa04c2f77c (2 revisions) (flutter/engine#38591) (#117863) * e5d605b3a Roll Skia from 2ffa04c2f77c to 269dce7e16bb (1 revision) (flutter/engine#38592) (#117865) * 71c5f1704 Roll Fuchsia Linux SDK from AE3lAqTc632VsY14L... to UAq0LO56_kbgA_BUQ... (flutter/engine#38593) (#117868) * 472e34cbb Roll Skia from 269dce7e16bb to fde37f5986fd (1 revision) (flutter/engine#38594) (#117869) * Roll Plugins from b202b3db98dc to e85f8ac1502d (3 revisions) (#117875) * 035d85e62 Roll Flutter from d2127ad344e8 to 120058fd3ded (15 revisions) (flutter/plugins#6896) * 80532e0ba Roll Flutter from 120058fd3ded to 0196e6050b75 (3 revisions) (flutter/plugins#6901) * e85f8ac15 Roll Flutter from 0196e6050b75 to b938dc13df32 (7 revisions) (flutter/plugins#6908) * [flutter_tools] timeline_test.dart flaky (#116667) * contains name instead of remove last * fix expect * remove and expect on elements * delete unused code * 7e51aef0a Roll Skia from fde37f5986fd to 809e328ed55c (1 revision) (flutter/engine#38596) (#117874) * Updated to tokens v0.150. (#117350) * Updated to tokens v0.150. * Updated with a reverted list_tile.dart. * Simplify null check. (#117026) * Simplify null check. * Simplify null check. * Simplify null check. * Fix. * Roll Flutter Engine from 7e51aef0a1be to 1d2ba73d1059 (9 revisions) (#117923) * 3e1b0dcb2 Roll Dart SDK from 881c0b56a1f7 to 617e70c95f5b (1 revision) (flutter/engine#38597) * 8b17efed8 Roll Fuchsia Linux SDK from UAq0LO56_kbgA_BUQ... to LA5kW39Gec7KvvM7x... (flutter/engine#38598) * 27960a700 [Impeller Scene] Import animation data (flutter/engine#38583) * b5acb2099 Roll Skia from 809e328ed55c to 697f9b541a0e (1 revision) (flutter/engine#38599) * dd0335b34 Roll Skia from 697f9b541a0e to 15d36b15bca1 (1 revision) (flutter/engine#38601) * adda2e80c [Impeller Scene] Animation binding and playback (flutter/engine#38595) * 71a296d53 Roll Fuchsia Linux SDK from LA5kW39Gec7KvvM7x... to rPo4_TYHCtkoOfRup... (flutter/engine#38607) * bde8d4524 Implement ITextProvider and ITextRangeProvider for UIA (flutter/engine#38538) * 1d2ba73d1 [Windows] Make the engine own the cursor plugin (flutter/engine#38570) * Reland "Remove single-view assumption from ScrollPhysics (#117503)" (#117916) This reverts commit c956121ac098b91061bfc0a93c930121ff3279ba. * Minor documentation fix on BorderRadiusDirectional.zero (#117661) * fix typos (#117592) * c0b3f8fce Make `AccessibilityBridge` a `AXPlatformTreeManager` (flutter/engine#38610) (#117931) * Add convenience constructors for SliverList (#116605) * init * lint * add the other two slivers * fix lint * add test for sliverlist.separated * add3 more * fix lint and tests * remove trailing spaces * remove trailing spaces 2 * fix lint * fix lint again * 2213b80dd [Impeller Scene] Use std::chrono for animation durations (flutter/engine#38606) (#117935) * Reland "Add support for double tap and drag for text selection #109573" (#117502) * Revert "Revert "Add support for double tap and drag for text selection (#109573)" (#117497)" This reverts commit 39fa0117a919bd401c4c8734c97ddb46fbc45cb7. * Allow TapAndDragGestureRecognizer to accept pointer events from any devices -- the TapGestureRecognizer it replaces was previously doing this Co-authored-by: Renzo Olivares <roliv@google.com> * == override parameters are non-nullable (#117839) * Fix the message strings for xcodeMissing and xcodeIncomplete (#117922) * Add macOS to xcodeMissing and xcodeIncomplete * And unit test * 32c468507 Roll quiver to 3.2.1 (flutter/engine#38617) (#117942) * Send text direction in selection rects (#117436) * Correctly propagate verbosity to subtasks in flutter.gradle (#117897) * Correctly propagate verbosity to subtasks in flutter.gradle * Add test * Revert accidental changes * Fix copyright year * Fix imports * Roll Plugins from e85f8ac1502d to f9dda6a27b79 (3 revisions) (#117972) * 6df3ef23f [in_app_pur] Add screenshots to pubspec.yaml (flutter/plugins#6540) * 42f8093c2 [google_maps_flutter] Fixed minor syntax error in the README.md (flutter/plugins#6909) * f9dda6a27 [image_picker_ios] Fix FLTPHPickerSaveImageToPathOperation property attributes (flutter/plugins#6890) * [flutter_tools] Fix null check in parsing web plugin from pubspec.yaml (#117939) * fix null check in parsing web plugin yaml * revert accidental diff * remove comment * roll packages (#117940) * roll packages (#118001) * [Android] Increase timeout duration for spell check integration test (#117989) * Add timeout * Add library directive * Add comment, remove testing only changes * Roll Flutter Engine from 32c468507b32 to cdd3bf29e27a (8 revisions) (#118014) * 22f872d5e Roll Dart SDK from 617e70c95f5b to f6dcb8b0b5d3 (7 revisions) (flutter/engine#38626) * c5e0f9ed0 Roll Dart SDK from f6dcb8b0b5d3 to 0b064bc49557 (1 revision) (flutter/engine#38630) * 398f5d3bd Roll Skia from 15d36b15bca1 to 9423a8a0fc2d (37 revisions) (flutter/engine#38631) * ebf01dcdb Update FlutterPlatformNodeDelegate (flutter/engine#38615) * d7dbe5bf3 Roll Skia from 9423a8a0fc2d to 60e4a4a27375 (5 revisions) (flutter/engine#38633) * 67440ccd5 fix roll (flutter/engine#38635) * 87bdde8fe Fix build using VS 17.4's C++ STL (flutter/engine#38614) * cdd3bf29e make DisplayListFlags constexpr throughout (flutter/engine#38649) * 60515762e [Impeller Scene] Compute joint transforms and apply them to skinned meshes (flutter/engine#38628) (#118016) * 35b7dee32 [Impeller] Set adaptive tolerance when rendering FillPathGeometry (flutter/engine#38497) (#118017) * b9b0193ea Roll Skia from 60e4a4a27375 to 158d51b34caa (19 revisions) (flutter/engine#38654) (#118018) * a01548f5f [Impeller Scene] Fix material/vertex color overlapping (flutter/engine#38653) (#118027) * Roll Plugins from f9dda6a27b79 to 320461910156 (2 revisions) (#118040) * 365332fe1 Roll Flutter from b938dc13df32 to 231855fc87d0 (19 revisions) (flutter/plugins#6913) * 320461910 Update image_picker_ios CODEOWNER (flutter/plugins#6891) * 072a9ca37 Add `TextProvider` and `TextEdit` patterns to `AXPlatformNodeWin` (flutter/engine#38646) (#118039) * bb4015269 Roll Skia from 158d51b34caa to ecd3a2f865ba (1 revision) (flutter/engine#38659) (#118042) * Avoid using `TextAffinity` in `TextBoundary` (#117446) * Avoid affinity like the plague * ignore lint * clean up * fix test * review * Move wordboundary to text painter * docs * fix tests * 74861f369 Reduce the size of Overlay FlutterImageView in HC mode (flutter/engine#38393) (#118048) * 5bd90d6e7 Consider more roles as text (flutter/engine#38645) (#118049) * [EMPTY] Commit to refresh the tree that is currently red (#118062) * Remove doc reference to the deprecated ui.FlutterWindow API (#118064) * Fix `flutter update-packages` regression by fixing parameters in "pub get" runner (#116687) * Make pub get runner respect printProgress and retry parameters * Fix typo * Add regression test * Improve test * Fix implementation and test * Test to fix flutter_drone tests * Revert test * Attempt #2 to fix flutter_drone tests * Revert attempt * Hack: Force printProgress to debug Windows tests * Use ProcessUtils.run to avoid dangling stdout and stderr * Update documentation * Clean up retry argument * Adding 'is' to list of kotlin reserved keywords (#116299) Co-authored-by: Gray Mackall <mackall@google.com> * Added expandIconColor property on ExpansionPanelList Widget (#115950) * Create expanIconColor doc template * Add expandIconColor property to ExpansionPanelList * Added tests for expandIconColor on ExpansionPanelList & radio * Removed trailing spaces * Update docstring (#118072) Co-authored-by: a-wallen <stephenwallen@google.com> * Fix out-of-sync ExpansionPanel animation (#105024) * Increase minimum height of headerWidget in ExpansionPanel to smooth the animation. Signed-off-by: Morris Kurz <morriskurz@gmail.com> * Add regression tests that check for equal height of header elements in ExpansionPanel. Signed-off-by: Morris Kurz <morriskurz@gmail.com> * Clarify comment. Signed-off-by: Morris Kurz <morriskurz@gmail.com> * Reduce padding in ExpandIcon to 12px s.t. header height is 48px. Signed-off-by: Morris Kurz <morriskurz@gmail.com> * Update testcases to new header height (56px -> 48px). Signed-off-by: Morris Kurz <morriskurz@gmail.com> * Test for header height equal to 48px. Signed-off-by: Morris Kurz <morriskurz@gmail.com> * Change issue number to link in comment * Add periods to comments Signed-off-by: Morris Kurz <morriskurz@gmail.com> * Roll Plugins from 320461910156 to 276cfd4b212d (2 revisions) (#118099) * 3a6f63bed Roll Flutter from 231855fc87d0 to 43b912090224 (11 revisions) (flutter/plugins#6918) * 276cfd4b2 [shared_preferences] Convert macOS to Pigeon (flutter/plugins#6914) * 33d7f8a1b Remove single view assumptions from `window.dart` (flutter/engine#38453) (#118069) * InteractiveViewer parameter to return to pre-3.3 trackpad/Magic Mouse behaviour (#114280) * trackpadPanShouldActAsZoom * Address feedback * Move constant, add blank lines * 0a0e3d205 Roll Flutter from 43b912090224 to 507062032fa4 (9 revisions) (flutter/plugins#6919) (#118183) * Roll Flutter Engine from 33d7f8a1b307 to 03609b420beb (6 revisions) (#118125) * c58254702 SkBudgeted -> skgpu::Budgeted (flutter/engine#38660) * 3d9214ace Bump actions/checkout from 3.1.0 to 3.2.0 (flutter/engine#38390) * a4775c7a7 Remove strict equality check for SkMatrix comparison (flutter/engine#38665) * 046012e8e [fuchsia] Enable CI for branches like `fuchsia_r51a`. (flutter/engine#38683) * cda410c28 Roll Skia from ecd3a2f865ba to 54dbda290908 (12 revisions) (flutter/engine#38668) * 03609b420 [web] Fix canvas2d leaks in text measurement (flutter/engine#38640) * remove the unused check in selectable_text (#117716) * Roll Flutter Engine from 03609b420beb to b5513d7a442a (2 revisions) (#118186) * fd5a96e10 Limit selection change to focused node on Windows (flutter/engine#38634) * b5513d7a4 Roll Dart SDK from 0b064bc49557 to cb29cb6d1d0f (12 revisions) (flutter/engine#38688) * Roll Flutter Engine from b5513d7a442a to 5bdb04f33f99 (2 revisions) (#118187) * e20809014 Roll Skia from 54dbda290908 to b8c0a78a2378 (43 revisions) (flutter/engine#38690) * 5bdb04f33 Roll Fuchsia Mac SDK from Bewt-eq7gNu6sU_Ob... to ORxExaprF9fW5d4MP... (flutter/engine#38697) * 51baed6e0 [fuchsia][scenic] Use infinite hit region (flutter/engine#38647) (#118189) * Update to Xcode 14.2 (#117507) * Update to Xcode 14.2 * Only bump for devicelab builders * Restore presubmit: false * Allow iOS and macOS plugins to share darwin directory (#115337) * Roll Flutter Engine from 51baed6e01b8 to 5df0072a0e63 (3 revisions) (#118192) * 181286315 Roll Dart SDK from cb29cb6d1d0f to 853eff8b0faa (2 revisions) (flutter/engine#38694) * 642f72f73 Bump actions/upload-artifact from 3.1.0 to 3.1.2 (flutter/engine#38713) * 5df0072a0 Bump actions/checkout from 3.2.0 to 3.3.0 (flutter/engine#38714) * Use program during attach if provided (#118130) * eb5c6f0b4 iOS FlutterTextureRegistry should be a proxy, not the engine itself (flutter/engine#37666) (#118197) * Update `ListTile` to support Material 3 (#117965) * Update `ListTile` to support Material 3 * Update `Default ListTile debugFillProperties` * Add #99933 HTML workaround. * 3a7d8862f Re-enable UIA text/range provider unit tests (flutter/engine#38718) (#118201) * Fix path for require.js (#118120) - Matches new location in the Dart SDK. https://dart-review.googlesource.com/c/sdk/+/275482 - Includes fall back logic so the existing and new locations will work depending on the file that is available. * ee0c4d26b Roll flutter/packages to 25454e (flutter/engine#38685) (#118205) * Roll Flutter Engine from ee0c4d26b0fa to 264aa032cf75 (2 revisions) (#118208) * 5a39a8846 Add CI builder for windows-arm64. (flutter/engine#38394) * 264aa032c Revert "Add CI builder for windows-arm64. (#38394)" (flutter/engine#38729) * 9c0b187a1 Roll Dart SDK from 853eff8b0faa to 418bee5da2e2 (4 revisions) (flutter/engine#38727) (#118210) * add closed/open focus traversal; use open on web (#115961) * allow focus to leave FlutterView * fix tests and docs * small doc update * fix analysis lint * use closed loop for dialogs * add tests for new API * address comments * test FocusScopeNode.traversalEdgeBehavior setter; reverse wrap-around * rename actionResult to invokeResult * address comments * Roll Flutter Engine from 9c0b187a1139 to 716bb9172c0d (3 revisions) (#118220) * b6720a5b7 Undo axes flip on Mac when shift+scroll-wheel (flutter/engine#38338) * 4f0cdcd0b Inline usage of SkIsPow2 (flutter/engine#38722) * 716bb9172 [Impeller Scene] Add DisplayList OP and Dart bindings (flutter/engine#38676) * Hide InkWell hover highlight when an hovered InkWell is disabled (#118026) * Allow select cases to be numbers (#116625) * [Impeller Scene] Add SceneC asset importing (#118157) * Add a comment about repeat event + fix typos (#118095) * Add MaterialStateProperty `overlayColor` & `mouseCursor` and fix hovering on thumbs behavior (#116894) * Roll Flutter Engine from 716bb9172c0d to 687e3cb0fbe2 (2 revisions) (#118242) * 24ee5c10f Roll Fuchsia Mac SDK from ORxExaprF9fW5d4MP... to zC90VpkAGMG1jJ-BK... (flutter/engine#38734) * 687e3cb0f Roll Dart SDK from 418bee5da2e2 to 8d7a6aabd3a3 (2 revisions) (flutter/engine#38738) * Roll Plugins from 0a0e3d205ca3 to 9fdc899b72ca (8 revisions) (#118253) * d03de2fce [tool] Don't add Guava in the all-packages app (flutter/plugins#6747) * d485c7e83 [local_auth]: Bump espresso-core (flutter/plugins#6925) * a47e71988 [webview_flutter_platform_interface] Improves error message when `WebViewPlatform.instance` is null (flutter/plugins#6938) * 7132dac0e [google_maps]: Bump espresso-core from 3.4.0 to 3.5.1 in /packages/google_maps_flutter/google_maps_flutter_android/android (flutter/plugins#6937) * dc3287ccf [espresso]: Bump truth from 1.4.0 to 1.5.0 in /packages/espresso/android (flutter/plugins#6707) * 1de6477bd [camera]: Bump camerax_version from 1.3.0-alpha01 to 1.3.0-alpha02 in /packages/camera/camera_android_camerax/android (flutter/plugins#6828) * fb405819e [shared_preferences] Merge iOS and macOS implementations (flutter/plugins#6920) * 9fdc899b7 [various] Enable `avoid_dynamic_calls` (flutter/plugins#6834) * Manually mark Windows run_debug_test_windows as unflaky (#118112) * Marks Mac_arm64_android run_debug_test_android to be unflaky (#117469) * Marks Mac_arm64_ios run_debug_test_macos to be unflaky (#117990) * remove unsound mode web test (#118256) * Update `CupertinoPicker` example (#118248) * Update `CupertinoPicker` example * format lines * Revert making variable public * revert variable change * roll packages (#118117) * Add option for opting out of enter route snapshotting. (#118086) * Add option for opting out of enter route snapshotting. * Fix typo. * Merge find layers logic. * Add justification comment on why web is skipped in test. * Update documentation as suggested. * Update documentation as suggested. * roll packages (#118272) * Roll Flutter Engine from 687e3cb0fbe2 to c1d61cf11da8 (6 revisions) (#118274) * ad9052a38 Roll Dart SDK from 8d7a6aabd3a3 to b90a008ddb29 (1 revision) (flutter/engine#38740) * c4c97023f Mark nodes as `kIsLineBreakingObject` by default, TODO further distinctions (flutter/engine#38721) * f40af3eb4 Roll Dart SDK from b90a008ddb29 to 5e344de60564 (1 revision) (flutter/engine#38744) * 41cfbdd7e Roll Fuchsia Mac SDK from zC90VpkAGMG1jJ-BK... to 6xysoRPCXJ3cJX12x... (flutter/engine#38746) * 95c7b1f8a Make operator == parameter non-nullable (flutter/engine#38663) * c1d61cf11 Move canvaskit artifacts to expected location in Web SDK Archive (flutter/engine#38168) * Align `flutter pub get/upgrade/add/remove/downgrade` (#117896) * Align `flutter pub get/upgrade/add/remove/downgrade` * Add final . to command description * Remove trailing whitespace * Don't print message that command is being run * Update expectations * Use relative path * Remove duplicated line * Improve function dartdoc * ae9e181e3 Roll Dart SDK from 5e344de60564 to 7b4d49402252 (1 revision) (flutter/engine#38756) (#118287) * Fix Finnish TimeOfDate format (#118204) * init * add test * Roll Flutter Engine from ae9e181e30c2 to 53bd4bbf9646 (3 revisions) (#118289) * b9a723482 [web] retain GL/Gr context on window resize (flutter/engine#38576) * fd4360671 Add SpringAnimation.js from React Native (flutter/engine#38750) * 53bd4bbf9 Roll Skia from b8c0a78a2378 to e1f3980272f3 (24 revisions) (flutter/engine#38758) * 9ade91c8b removed forbidden skia include (flutter/engine#38761) (#118296) * 8d7beac82 Roll Dart SDK from 7b4d49402252 to 23cbd61a1327 (1 revision) (flutter/engine#38764) (#118297) * 6256f05db Roll Fuchsia Mac SDK from 6xysoRPCXJ3cJX12x... to a9NpYJbjhDRX9P9u4... (flutter/engine#38767) (#118300) * FIX: UnderlineInputBorder hashCode and equality by including borderRadius (#118284) * Bump actions/upload-artifact from 3.1.1 to 3.1.2 (#118116) Bumps [actions/upload-artifact](https://github.com/actions/upload-artifact) from 3.1.1 to 3.1.2. - [Release notes](https://github.com/actions/upload-artifact/releases) - [Commits]( |
||
|
|
71a42563db
|
Revert "[Re-land] Button padding m3 (#118640)" (#118962)
This reverts commit 973cff40b4022edd59dbf44475ffc569bece1ea8. |