-
Notifications
You must be signed in to change notification settings - Fork 29.7k
WidgetState mapping
#146043
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
WidgetState mapping
#146043
Conversation
|
imo |
|
@cedvdb this is a really good point.
Apologies for not making this change sooner! |
MitchellGoodwin
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thank you for this PR! I think this is a great solution, that covers simple cases and complicated combinations well. I have some questions I'd like to talk about, but no complaints otherwise.
MitchellGoodwin
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM with one follow up on naming. Thanks again for this PR, it's a great addition.
This comment was marked as outdated.
This comment was marked as outdated.
|
The Google testing looks related. In one spot, there is a set of only a few WidgetStates. It threw this error over this: Context: The element 'WidgetState {}' conflicts with another existing element in the set.
Context: While analyzing: const interactiveStates = { |
This comment was marked as resolved.
This comment was marked as resolved.
This comment was marked as resolved.
This comment was marked as resolved.
This comment was marked as resolved.
This comment was marked as resolved.
This comment was marked as resolved.
This comment was marked as resolved.
a1bb9b5 to
da86ed7
Compare
cb6c862 to
e8b87ac
Compare
This comment was marked as resolved.
This comment was marked as resolved.
|
Third time's the charm! 🤞 |
Roll Flutter from 58068d8 to 7d5c1c0 (104 revisions) flutter/flutter@58068d8...7d5c1c0 2024-07-19 [email protected] Enhances intuitiveness of RawMagnifier's example (flutter/flutter#150308) 2024-07-19 [email protected] Roll pub packages (flutter/flutter#151992) 2024-07-19 [email protected] Add test for scrollbar.1.dart (flutter/flutter#151463) 2024-07-19 [email protected] Roll Flutter Engine from ea1e53a4e810 to 969fb7abc449 (3 revisions) (flutter/flutter#152018) 2024-07-19 [email protected] docimports for rendering library (flutter/flutter#151958) 2024-07-19 [email protected] Roll Flutter Engine from b65c93ea948e to ea1e53a4e810 (2 revisions) (flutter/flutter#152012) 2024-07-19 [email protected] painting: drop deprecated (exported) hashList and hashValues functions (flutter/flutter#151677) 2024-07-18 [email protected] Roll Flutter Engine from 766f7bed7185 to b65c93ea948e (2 revisions) (flutter/flutter#152004) 2024-07-18 [email protected] Update TESTOWNERS (flutter/flutter#151907) 2024-07-18 [email protected] chore: fix test name & add description of tests (flutter/flutter#151959) 2024-07-18 [email protected] Roll Flutter Engine from 564ded4c4742 to 766f7bed7185 (2 revisions) (flutter/flutter#151998) 2024-07-18 [email protected] Fix SelectionArea scrolling conflicts (flutter/flutter#151138) 2024-07-18 [email protected] Fix: BaseTapAndDragGestureRecognizer should reset drag state after losing gesture arena (flutter/flutter#151989) 2024-07-18 [email protected] Roll pub packages (flutter/flutter#151975) 2024-07-18 [email protected] Roll Flutter Engine from 8bcf638eb893 to 564ded4c4742 (2 revisions) (flutter/flutter#151986) 2024-07-18 [email protected] Fix WidgetStateTextStyle's doc (flutter/flutter#151935) 2024-07-18 [email protected] Roll Flutter Engine from d58ba74250ce to 8bcf638eb893 (2 revisions) (flutter/flutter#151977) 2024-07-18 [email protected] Adds 3.22.3 changelog (flutter/flutter#151974) 2024-07-18 [email protected] Roll Packages from d03b1b4 to c7f0526 (8 revisions) (flutter/flutter#151971) 2024-07-18 [email protected] `WidgetState` mapping (flutter/flutter#146043) 2024-07-18 [email protected] Fix AppBar doc to keep diagram next to its description (flutter/flutter#151937) 2024-07-18 [email protected] Small fixes to Image docs: NNBD, and add a cross-reference (flutter/flutter#151938) 2024-07-18 [email protected] Roll Flutter Engine from b043fe447bb3 to d58ba74250ce (1 revision) (flutter/flutter#151964) 2024-07-18 [email protected] Roll pub packages (flutter/flutter#151946) 2024-07-18 [email protected] Roll pub packages (flutter/flutter#151904) 2024-07-18 [email protected] Roll Flutter Engine from e3abca2d8105 to b043fe447bb3 (1 revision) (flutter/flutter#151942) 2024-07-18 [email protected] Roll Flutter Engine from 8073523b4623 to e3abca2d8105 (1 revision) (flutter/flutter#151936) 2024-07-18 [email protected] Roll Flutter Engine from dfe22e3acc19 to 8073523b4623 (1 revision) (flutter/flutter#151934) 2024-07-18 [email protected] Roll Flutter Engine from 184c3f0de6b3 to dfe22e3acc19 (1 revision) (flutter/flutter#151930) 2024-07-18 [email protected] Roll Flutter Engine from 00f0f6b74da7 to 184c3f0de6b3 (1 revision) (flutter/flutter#151928) 2024-07-18 [email protected] Roll Flutter Engine from d194a2f0e5da to 00f0f6b74da7 (1 revision) (flutter/flutter#151927) 2024-07-18 [email protected] Roll Flutter Engine from a5a93bb80bd1 to d194a2f0e5da (3 revisions) (flutter/flutter#151925) 2024-07-17 [email protected] Roll Flutter Engine from e9dc62074c2b to a5a93bb80bd1 (1 revision) (flutter/flutter#151918) 2024-07-17 [email protected] [web] use the new backlog Github project in triage links (flutter/flutter#151920) 2024-07-17 [email protected] Update Flutter-Web-Triage.md (flutter/flutter#151607) 2024-07-17 [email protected] Reland fix InputDecorator hint default text style on M3 (flutter/flutter#150835) 2024-07-17 [email protected] Roll Flutter Engine from 39ee1a549581 to e9dc62074c2b (3 revisions) (flutter/flutter#151915) 2024-07-17 [email protected] Constrain `CupertinoContextMenu` animation to safe area (flutter/flutter#151860) 2024-07-17 [email protected] Create `CarouselView` widget - Part 2 (flutter/flutter#149775) 2024-07-17 [email protected] Roll Flutter Engine from 45b722b661f0 to 39ee1a549581 (3 revisions) (flutter/flutter#151905) 2024-07-17 [email protected] docs: Fix typo in data driven fixes test folder section (flutter/flutter#151836) 2024-07-17 [email protected] Stop running flaky mac tests in presubmit (flutter/flutter#151870) 2024-07-17 [email protected] Roll Flutter Engine from 7e2579634027 to 45b722b661f0 (1 revision) (flutter/flutter#151895) 2024-07-17 [email protected] fix(Flutter Web App): fixes html lang typo (flutter/flutter#151866) 2024-07-17 [email protected] Delete `docs/engine` directory (flutter/flutter#151616) 2024-07-17 [email protected] Make `CupertinoSlidingSegmentedControl` type parameter non-null (flutter/flutter#151803) ...
This pull request implements [enhanced enum](https://dart.dev/language/enums#declaring-enhanced-enums) features for the new `WidgetState` enum, in order to improve the developer experience when creating and using `WidgetStateProperty` objects. `WidgetState` now has a `.matchesSet()` method: ```dart // identical to "states.contains(WidgetState.error)" final bool hasError = WidgetState.error.isSatisfiedBy(states); ``` This addition allows for wide variety of `WidgetStateProperty` objects to be constructed in a simple manner. <br><br> ```dart // before final style = MaterialStateTextStyle.resolveWith((states) { if (states.contains(MaterialState.error)) { return TextStyle(color: Colors.red); } else if (states.contains(MaterialState.focused)) { return TextStyle(color: Colors.blue); } return TextStyle(color: Colors.black); }); // after final style = WidgetStateTextStyle.fromMap({ WidgetState.error: TextStyle(color: Colors.red), WidgetState.focused: TextStyle(color: Colors.blue), WidgetState.any: TextStyle(color: Colors.black), // "any" is a static const member, not an enum value }); ``` ```dart // before final color = MaterialStateProperty.resolveWith((states) { if (states.contains(MaterialState.focused)) { return Colors.blue; } else if (!states.contains(MaterialState.disabled)) { return Colors.black; } return null; }); // after final color = WidgetStateProperty<Color?>.fromMap({ WidgetState.focused: Colors.blue, ~WidgetState.disabled: Colors.black, }); ``` ```dart // before const activeStates = [MaterialState.selected, MaterialState.focused, MaterialState.scrolledUnder]; final color = MaterialStateColor.resolveWith((states) { if (activeStates.any(states.contains)) { if (states.contains(MaterialState.hovered) { return Colors.blueAccent; } return Colors.blue; } return Colors.black; }); // after final active = WidgetState.selected | WidgetState.focused | WidgetState.scrolledUnder; final color = WidgetStateColor.fromMap({ active & WidgetState.hovered: Colors.blueAccent, active: Colors.blue, ~active: Colors.black, }); ``` <br> (fixes flutter#146042, and also fixes flutter#143488)
This pull request implements [enhanced enum](https://dart.dev/language/enums#declaring-enhanced-enums) features for the new `WidgetState` enum, in order to improve the developer experience when creating and using `WidgetStateProperty` objects. `WidgetState` now has a `.matchesSet()` method: ```dart // identical to "states.contains(WidgetState.error)" final bool hasError = WidgetState.error.isSatisfiedBy(states); ``` This addition allows for wide variety of `WidgetStateProperty` objects to be constructed in a simple manner. <br><br> ```dart // before final style = MaterialStateTextStyle.resolveWith((states) { if (states.contains(MaterialState.error)) { return TextStyle(color: Colors.red); } else if (states.contains(MaterialState.focused)) { return TextStyle(color: Colors.blue); } return TextStyle(color: Colors.black); }); // after final style = WidgetStateTextStyle.fromMap({ WidgetState.error: TextStyle(color: Colors.red), WidgetState.focused: TextStyle(color: Colors.blue), WidgetState.any: TextStyle(color: Colors.black), // "any" is a static const member, not an enum value }); ``` ```dart // before final color = MaterialStateProperty.resolveWith((states) { if (states.contains(MaterialState.focused)) { return Colors.blue; } else if (!states.contains(MaterialState.disabled)) { return Colors.black; } return null; }); // after final color = WidgetStateProperty<Color?>.fromMap({ WidgetState.focused: Colors.blue, ~WidgetState.disabled: Colors.black, }); ``` ```dart // before const activeStates = [MaterialState.selected, MaterialState.focused, MaterialState.scrolledUnder]; final color = MaterialStateColor.resolveWith((states) { if (activeStates.any(states.contains)) { if (states.contains(MaterialState.hovered) { return Colors.blueAccent; } return Colors.blue; } return Colors.black; }); // after final active = WidgetState.selected | WidgetState.focused | WidgetState.scrolledUnder; final color = WidgetStateColor.fromMap({ active & WidgetState.hovered: Colors.blueAccent, active: Colors.blue, ~active: Colors.black, }); ``` <br> (fixes flutter#146042, and also fixes flutter#143488)
This pull request implements enhanced enum features for the new
WidgetStateenum, in order to improve the developer experience when creating and usingWidgetStatePropertyobjects.WidgetStatenow has a.matchesSet()method:This addition allows for wide variety of
WidgetStatePropertyobjects to be constructed in a simple manner.(fixes #146042, and also fixes #143488)