Repository navigation
WidgetStatesConstraint as a mixin - #181704
Conversation
There was a problem hiding this comment.
Code Review
This pull request refactors WidgetStatesConstraint from an abstract interface class to a mixin, moving operator logic from the WidgetStateOperators extension directly into the mixin. This change aligns with the Flutter style guide's recommendation to avoid extensions on base types. All implementing classes are updated to use the mixin, and a new test is added to validate the change. The refactoring is well-executed and achieves its goal.
|
@nate-thegrate Would you mind looking up the PR that added this change so we can see why this was done in the first place? |
|
Here's the PR that added this change: Originally, I had an A few months back I realized that it could have just been a single |
|
FYI, I'll be doing a Dash Forum tomorrow that proposes loosing our extension method restrictions: flutter.dev/go/flutter-style-updates. The new guidance - if accepted - will allow extension methods with guardrails that nudge folks towards instance methods. You can see my draft of the new guidance here: #181934 Anywho, this change looks good to me regardless. Thanks for the contribution! |
justinmc
left a comment
There was a problem hiding this comment.
LGTM 👍 . Thank you for the explanation and for coming back to clean this up!
bdcf941 to
2f40ce0
Compare
This PR removes the `WidgetStateOperators` extension, per the [style guide](https://github.com/flutter/flutter/blob/master/docs/contributing/Style-guide-for-Flutter-repo.md#avoid-using-extension). Should be a non-breaking change.
Roll Flutter from b31548feb941 to 1141b2bdce66 (56 revisions) flutter/flutter@b31548f...1141b2b 2026-02-27 [email protected] flutter#182361 Fix delegate copy on plugins init (flutter/flutter#182362) 2026-02-27 [email protected] Roll Dart SDK from 8b036b3e63cb to 1cdb7dfd913e (1 revision) (flutter/flutter#183004) 2026-02-27 [email protected] Manual roll Dart SDK to 3.12.0-192.0.dev (flutter/flutter#182883) 2026-02-27 [email protected] Roll Skia from e2062707b0c0 to ed220c490eea (1 revision) (flutter/flutter#182992) 2026-02-27 [email protected] Roll Skia from e5aa1ab5c59c to e2062707b0c0 (3 revisions) (flutter/flutter#182989) 2026-02-27 [email protected] Linux build hooks: Read compiler config from CMakeCache.txt (flutter/flutter#181004) 2026-02-27 [email protected] Roll ICU from a86a32e67b8d to 7971660ba630 (3 revisions) (flutter/flutter#182986) 2026-02-27 [email protected] Roll Skia from 49c2de95384e to e5aa1ab5c59c (2 revisions) (flutter/flutter#182980) 2026-02-27 [email protected] [Impeller] Remove shared rendering data from TextFrame (flutter/flutter#182886) 2026-02-27 [email protected] Add fl_view_new_sized_to_content() (flutter/flutter#182924) 2026-02-27 [email protected] [Shortcuts] Improve focus node debug labels (flutter/flutter#181834) 2026-02-27 [email protected] Add a cli flag for toggling HCPP use, and enable it (flutter/flutter#182516) 2026-02-27 [email protected] `SizedBox.square()` (flutter/flutter#182731) 2026-02-27 [email protected] [web] Fix stack corruption in Skwasm and harden withStackScope API (flutter/flutter#182912) 2026-02-26 [email protected] Roll zlib to 7eda07b1e067 (flutter/flutter#182692) 2026-02-26 [email protected] [ CI ] Don't crash analysis when ktlint isn't on PATH (flutter/flutter#181854) 2026-02-26 [email protected] Add calls to await `flutterDriver.waitUntilFirstFrameRasterized()` for all `android_engine_test` screenshot tests (flutter/flutter#182961) 2026-02-26 [email protected] Roll Skia from f44d7db68805 to 49c2de95384e (30 revisions) (flutter/flutter#182957) 2026-02-26 [email protected] Support sending window constraints in metrics events (flutter/flutter#182921) 2026-02-26 [email protected] Reland: remove material in context_menu_controller_test, icon_test, list_wheel_scroll_view_test, media_query_test, platform_menu_bar_test (flutter/flutter#182891) 2026-02-26 [email protected] Remove some instances of useMaterial3: true (flutter/flutter#182944) 2026-02-26 [email protected] [Impeller] Use bilinear filtering for non-uniform scaled text (flutter/flutter#182224) 2026-02-26 [email protected] Add a ResidentCompilerFactory to create ResidentCompiler instances. (flutter/flutter#182930) 2026-02-26 [email protected] Add a getter in run.dart to access use-application-binary flag. (flutter/flutter#182931) 2026-02-26 [email protected] [web] Roll Firefox to 148 (flutter/flutter#182859) 2026-02-26 [email protected] Roll Packages from acd9adb to e1d0169 (8 revisions) (flutter/flutter#182946) 2026-02-26 [email protected] Roll Fuchsia Linux SDK from XI0Ax7fbtYE4XKYAQ... to G1GwOdVt5bM7GjMSY... (flutter/flutter#182942) 2026-02-26 [email protected] Add test for WindowPositioner.toString (flutter/flutter#182906) 2026-02-26 [email protected] Remove unused function prototype (flutter/flutter#182915) 2026-02-26 [email protected] Resolve inconsistency with SchedulerBinding.scheduleTask usage recomm… (flutter/flutter#182531) 2026-02-26 [email protected] Fix false positives for hit test misses in flutter_test (flutter/flutter#180856) 2026-02-26 [email protected] Replace an instance of flutter/engine with flutter/flutter (flutter/flutter#182655) 2026-02-26 [email protected] Use null-aware elements in widgets/routes.dart (flutter/flutter#181242) 2026-02-26 [email protected] Fix typos in method names across multiple files (flutter/flutter#182584) 2026-02-26 [email protected] Fix RawAutocomplete crash when options are hidden (flutter/flutter#182785) 2026-02-26 [email protected] Describe implications of tree-status and Google Testing for PRs (flutter/flutter#182916) 2026-02-26 [email protected] Make sure that a StretchingOverscrollIndicator doesn't crash when it … (flutter/flutter#182499) 2026-02-26 [email protected] framework: Use a super-parameter in several missed cases (flutter/flutter#182580) 2026-02-25 [email protected] `WidgetStatesConstraint` as a mixin (flutter/flutter#181704) 2026-02-25 [email protected] Paint the paragraph as a single image (flutter/flutter#181206) 2026-02-25 [email protected] Remove `ExtendSelectionByPageIntent` (flutter/flutter#182642) 2026-02-25 [email protected] feat: add few required properties to test widgets app (flutter/flutter#182805) 2026-02-25 [email protected] Updates MenuAnchor to respect software keyboard (flutter/flutter#180975) 2026-02-25 [email protected] Roll ImGui to v1.92.6-docking (flutter/flutter#182799) 2026-02-25 [email protected] Roll GoogleTest to e9907112b472 (flutter/flutter#182795) 2026-02-25 [email protected] Make positionInlineChildren assert much clearer (flutter/flutter#182093) ...
This PR removes the `WidgetStateOperators` extension, per the [style guide](https://github.com/flutter/flutter/blob/master/docs/contributing/Style-guide-for-Flutter-repo.md#avoid-using-extension). Should be a non-breaking change.
…r#11137) Roll Flutter from b31548feb941 to 1141b2bdce66 (56 revisions) flutter/flutter@b31548f...1141b2b 2026-02-27 [email protected] flutter#182361 Fix delegate copy on plugins init (flutter/flutter#182362) 2026-02-27 [email protected] Roll Dart SDK from 8b036b3e63cb to 1cdb7dfd913e (1 revision) (flutter/flutter#183004) 2026-02-27 [email protected] Manual roll Dart SDK to 3.12.0-192.0.dev (flutter/flutter#182883) 2026-02-27 [email protected] Roll Skia from e2062707b0c0 to ed220c490eea (1 revision) (flutter/flutter#182992) 2026-02-27 [email protected] Roll Skia from e5aa1ab5c59c to e2062707b0c0 (3 revisions) (flutter/flutter#182989) 2026-02-27 [email protected] Linux build hooks: Read compiler config from CMakeCache.txt (flutter/flutter#181004) 2026-02-27 [email protected] Roll ICU from a86a32e67b8d to 7971660ba630 (3 revisions) (flutter/flutter#182986) 2026-02-27 [email protected] Roll Skia from 49c2de95384e to e5aa1ab5c59c (2 revisions) (flutter/flutter#182980) 2026-02-27 [email protected] [Impeller] Remove shared rendering data from TextFrame (flutter/flutter#182886) 2026-02-27 [email protected] Add fl_view_new_sized_to_content() (flutter/flutter#182924) 2026-02-27 [email protected] [Shortcuts] Improve focus node debug labels (flutter/flutter#181834) 2026-02-27 [email protected] Add a cli flag for toggling HCPP use, and enable it (flutter/flutter#182516) 2026-02-27 [email protected] `SizedBox.square()` (flutter/flutter#182731) 2026-02-27 [email protected] [web] Fix stack corruption in Skwasm and harden withStackScope API (flutter/flutter#182912) 2026-02-26 [email protected] Roll zlib to 7eda07b1e067 (flutter/flutter#182692) 2026-02-26 [email protected] [ CI ] Don't crash analysis when ktlint isn't on PATH (flutter/flutter#181854) 2026-02-26 [email protected] Add calls to await `flutterDriver.waitUntilFirstFrameRasterized()` for all `android_engine_test` screenshot tests (flutter/flutter#182961) 2026-02-26 [email protected] Roll Skia from f44d7db68805 to 49c2de95384e (30 revisions) (flutter/flutter#182957) 2026-02-26 [email protected] Support sending window constraints in metrics events (flutter/flutter#182921) 2026-02-26 [email protected] Reland: remove material in context_menu_controller_test, icon_test, list_wheel_scroll_view_test, media_query_test, platform_menu_bar_test (flutter/flutter#182891) 2026-02-26 [email protected] Remove some instances of useMaterial3: true (flutter/flutter#182944) 2026-02-26 [email protected] [Impeller] Use bilinear filtering for non-uniform scaled text (flutter/flutter#182224) 2026-02-26 [email protected] Add a ResidentCompilerFactory to create ResidentCompiler instances. (flutter/flutter#182930) 2026-02-26 [email protected] Add a getter in run.dart to access use-application-binary flag. (flutter/flutter#182931) 2026-02-26 [email protected] [web] Roll Firefox to 148 (flutter/flutter#182859) 2026-02-26 [email protected] Roll Packages from acd9adb to e1d0169 (8 revisions) (flutter/flutter#182946) 2026-02-26 [email protected] Roll Fuchsia Linux SDK from XI0Ax7fbtYE4XKYAQ... to G1GwOdVt5bM7GjMSY... (flutter/flutter#182942) 2026-02-26 [email protected] Add test for WindowPositioner.toString (flutter/flutter#182906) 2026-02-26 [email protected] Remove unused function prototype (flutter/flutter#182915) 2026-02-26 [email protected] Resolve inconsistency with SchedulerBinding.scheduleTask usage recomm… (flutter/flutter#182531) 2026-02-26 [email protected] Fix false positives for hit test misses in flutter_test (flutter/flutter#180856) 2026-02-26 [email protected] Replace an instance of flutter/engine with flutter/flutter (flutter/flutter#182655) 2026-02-26 [email protected] Use null-aware elements in widgets/routes.dart (flutter/flutter#181242) 2026-02-26 [email protected] Fix typos in method names across multiple files (flutter/flutter#182584) 2026-02-26 [email protected] Fix RawAutocomplete crash when options are hidden (flutter/flutter#182785) 2026-02-26 [email protected] Describe implications of tree-status and Google Testing for PRs (flutter/flutter#182916) 2026-02-26 [email protected] Make sure that a StretchingOverscrollIndicator doesn't crash when it … (flutter/flutter#182499) 2026-02-26 [email protected] framework: Use a super-parameter in several missed cases (flutter/flutter#182580) 2026-02-25 [email protected] `WidgetStatesConstraint` as a mixin (flutter/flutter#181704) 2026-02-25 [email protected] Paint the paragraph as a single image (flutter/flutter#181206) 2026-02-25 [email protected] Remove `ExtendSelectionByPageIntent` (flutter/flutter#182642) 2026-02-25 [email protected] feat: add few required properties to test widgets app (flutter/flutter#182805) 2026-02-25 [email protected] Updates MenuAnchor to respect software keyboard (flutter/flutter#180975) 2026-02-25 [email protected] Roll ImGui to v1.92.6-docking (flutter/flutter#182799) 2026-02-25 [email protected] Roll GoogleTest to e9907112b472 (flutter/flutter#182795) 2026-02-25 [email protected] Make positionInlineChildren assert much clearer (flutter/flutter#182093) ...
This PR removes the `WidgetStateOperators` extension, per the [style guide](https://github.com/flutter/flutter/blob/master/docs/contributing/Style-guide-for-Flutter-repo.md#avoid-using-extension). Should be a non-breaking change.
…r#11137) Roll Flutter from b31548feb941 to 1141b2bdce66 (56 revisions) flutter/flutter@b31548f...1141b2b 2026-02-27 [email protected] flutter#182361 Fix delegate copy on plugins init (flutter/flutter#182362) 2026-02-27 [email protected] Roll Dart SDK from 8b036b3e63cb to 1cdb7dfd913e (1 revision) (flutter/flutter#183004) 2026-02-27 [email protected] Manual roll Dart SDK to 3.12.0-192.0.dev (flutter/flutter#182883) 2026-02-27 [email protected] Roll Skia from e2062707b0c0 to ed220c490eea (1 revision) (flutter/flutter#182992) 2026-02-27 [email protected] Roll Skia from e5aa1ab5c59c to e2062707b0c0 (3 revisions) (flutter/flutter#182989) 2026-02-27 [email protected] Linux build hooks: Read compiler config from CMakeCache.txt (flutter/flutter#181004) 2026-02-27 [email protected] Roll ICU from a86a32e67b8d to 7971660ba630 (3 revisions) (flutter/flutter#182986) 2026-02-27 [email protected] Roll Skia from 49c2de95384e to e5aa1ab5c59c (2 revisions) (flutter/flutter#182980) 2026-02-27 [email protected] [Impeller] Remove shared rendering data from TextFrame (flutter/flutter#182886) 2026-02-27 [email protected] Add fl_view_new_sized_to_content() (flutter/flutter#182924) 2026-02-27 [email protected] [Shortcuts] Improve focus node debug labels (flutter/flutter#181834) 2026-02-27 [email protected] Add a cli flag for toggling HCPP use, and enable it (flutter/flutter#182516) 2026-02-27 [email protected] `SizedBox.square()` (flutter/flutter#182731) 2026-02-27 [email protected] [web] Fix stack corruption in Skwasm and harden withStackScope API (flutter/flutter#182912) 2026-02-26 [email protected] Roll zlib to 7eda07b1e067 (flutter/flutter#182692) 2026-02-26 [email protected] [ CI ] Don't crash analysis when ktlint isn't on PATH (flutter/flutter#181854) 2026-02-26 [email protected] Add calls to await `flutterDriver.waitUntilFirstFrameRasterized()` for all `android_engine_test` screenshot tests (flutter/flutter#182961) 2026-02-26 [email protected] Roll Skia from f44d7db68805 to 49c2de95384e (30 revisions) (flutter/flutter#182957) 2026-02-26 [email protected] Support sending window constraints in metrics events (flutter/flutter#182921) 2026-02-26 [email protected] Reland: remove material in context_menu_controller_test, icon_test, list_wheel_scroll_view_test, media_query_test, platform_menu_bar_test (flutter/flutter#182891) 2026-02-26 [email protected] Remove some instances of useMaterial3: true (flutter/flutter#182944) 2026-02-26 [email protected] [Impeller] Use bilinear filtering for non-uniform scaled text (flutter/flutter#182224) 2026-02-26 [email protected] Add a ResidentCompilerFactory to create ResidentCompiler instances. (flutter/flutter#182930) 2026-02-26 [email protected] Add a getter in run.dart to access use-application-binary flag. (flutter/flutter#182931) 2026-02-26 [email protected] [web] Roll Firefox to 148 (flutter/flutter#182859) 2026-02-26 [email protected] Roll Packages from acd9adb to e1d0169 (8 revisions) (flutter/flutter#182946) 2026-02-26 [email protected] Roll Fuchsia Linux SDK from XI0Ax7fbtYE4XKYAQ... to G1GwOdVt5bM7GjMSY... (flutter/flutter#182942) 2026-02-26 [email protected] Add test for WindowPositioner.toString (flutter/flutter#182906) 2026-02-26 [email protected] Remove unused function prototype (flutter/flutter#182915) 2026-02-26 [email protected] Resolve inconsistency with SchedulerBinding.scheduleTask usage recomm… (flutter/flutter#182531) 2026-02-26 [email protected] Fix false positives for hit test misses in flutter_test (flutter/flutter#180856) 2026-02-26 [email protected] Replace an instance of flutter/engine with flutter/flutter (flutter/flutter#182655) 2026-02-26 [email protected] Use null-aware elements in widgets/routes.dart (flutter/flutter#181242) 2026-02-26 [email protected] Fix typos in method names across multiple files (flutter/flutter#182584) 2026-02-26 [email protected] Fix RawAutocomplete crash when options are hidden (flutter/flutter#182785) 2026-02-26 [email protected] Describe implications of tree-status and Google Testing for PRs (flutter/flutter#182916) 2026-02-26 [email protected] Make sure that a StretchingOverscrollIndicator doesn't crash when it … (flutter/flutter#182499) 2026-02-26 [email protected] framework: Use a super-parameter in several missed cases (flutter/flutter#182580) 2026-02-25 [email protected] `WidgetStatesConstraint` as a mixin (flutter/flutter#181704) 2026-02-25 [email protected] Paint the paragraph as a single image (flutter/flutter#181206) 2026-02-25 [email protected] Remove `ExtendSelectionByPageIntent` (flutter/flutter#182642) 2026-02-25 [email protected] feat: add few required properties to test widgets app (flutter/flutter#182805) 2026-02-25 [email protected] Updates MenuAnchor to respect software keyboard (flutter/flutter#180975) 2026-02-25 [email protected] Roll ImGui to v1.92.6-docking (flutter/flutter#182799) 2026-02-25 [email protected] Roll GoogleTest to e9907112b472 (flutter/flutter#182795) 2026-02-25 [email protected] Make positionInlineChildren assert much clearer (flutter/flutter#182093) ...
This PR removes the
WidgetStateOperatorsextension, per the style guide.Should be a non-breaking change.