Skip to content

Conversation

@dkwingsmt
Copy link
Contributor

@dkwingsmt dkwingsmt commented Jul 24, 2024

This PR is a refactor that makes _ActionSheetButtonBackground widgets no longer record their own pressed state, but instead receive this state from their parent. In this way, _ActionSheetButtonBackground becomes a stateless widget. The children states are duplicate because the parent has to keep track of the state for rendering dividers.

An obstacle with this change is that _ActionSheetButtonBackground needs an object that is persistent across rebuilds to provide to Metadata.data. Either it is kept as a stateful widget without any actual states, or it is made stateless and its Element as the object. After discussion, the first option is used.

_ActionSheetSlideTarget is renamed to _SlideTarget since the alert dialog will soon use this class as well.

This refactor shouldn't need additional tests. Still, one test is added for a behavior that I broke during development and found not covered by the unit tests then.

Pre-launch Checklist

If you need help, consider asking for advice on the #hackers-new channel on Discord.

@github-actions github-actions bot added framework flutter/packages/flutter repository. See also f: labels. f: cupertino flutter/packages/flutter/cupertino repository labels Jul 24, 2024
@dkwingsmt dkwingsmt marked this pull request as ready for review July 25, 2024 06:25
@dkwingsmt dkwingsmt requested a review from chunhtai July 25, 2024 06:25
@flutter-dashboard
Copy link

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

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

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

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

Changes reported for pull request #152283 at sha adf62a6

@flutter-dashboard flutter-dashboard bot added the will affect goldens Changes to golden files label Jul 25, 2024
//
// Although this class doesn't keep any states, it's still a stateful widget
// because the state is used as a persistent object across rebuilds to provide
// to [MetaData.data].
Copy link
Contributor

Choose a reason for hiding this comment

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

Can the _CupertinoActionSheetState creates a persistent _SlideTarget object to pass into _ActionSheetButtonBackground, this way this can be a statewidget and onPressStateChange is not needed

Copy link
Contributor Author

Choose a reason for hiding this comment

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

That's a great idea!

Copy link
Contributor Author

Choose a reason for hiding this comment

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

On a second thought, I found it harder than imagined because the _CupertinoActionSheetState has to keep track of the number of children and resize the list of _SlideTarget objects based on that, which is not the most cleanest code. I would just rather keep the stateful widget.

Copy link
Contributor

Choose a reason for hiding this comment

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

sounds good

class _ActionSheetMainSheet extends StatefulWidget {
//
// The reason that this class is not merged into `_CupertinoActionSheetState` is
// because a few old unit tests query this class to verify layout behavior.
Copy link
Contributor

Choose a reason for hiding this comment

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

I think it is generally preferable to separate out state and presentation widget like this. but I don't think doing this due to old unit tests is good reasoning. I will probably just remove this comment.

Copy link
Contributor

@chunhtai chunhtai left a comment

Choose a reason for hiding this comment

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

LGTM

@dkwingsmt dkwingsmt added the autosubmit Merge PR when tree becomes green via auto submit App label Jul 31, 2024
@auto-submit auto-submit bot merged commit 3303973 into flutter:master Jul 31, 2024
engine-flutter-autoroll added a commit to engine-flutter-autoroll/packages that referenced this pull request Aug 1, 2024
engine-flutter-autoroll added a commit to engine-flutter-autoroll/packages that referenced this pull request Aug 1, 2024
engine-flutter-autoroll added a commit to engine-flutter-autoroll/packages that referenced this pull request Aug 1, 2024
engine-flutter-autoroll added a commit to engine-flutter-autoroll/packages that referenced this pull request Aug 1, 2024
engine-flutter-autoroll added a commit to engine-flutter-autoroll/packages that referenced this pull request Aug 1, 2024
engine-flutter-autoroll added a commit to engine-flutter-autoroll/packages that referenced this pull request Aug 2, 2024
engine-flutter-autoroll added a commit to engine-flutter-autoroll/packages that referenced this pull request Aug 2, 2024
engine-flutter-autoroll added a commit to engine-flutter-autoroll/packages that referenced this pull request Aug 2, 2024
engine-flutter-autoroll added a commit to engine-flutter-autoroll/packages that referenced this pull request Aug 2, 2024
engine-flutter-autoroll added a commit to engine-flutter-autoroll/packages that referenced this pull request Aug 3, 2024
auto-submit bot pushed a commit to flutter/packages that referenced this pull request Aug 3, 2024
Manual roll Flutter from 85960d2 to 4ff9462 (45 revisions)

Manual roll requested by stuartmorgan@google.com

flutter/flutter@85960d2...4ff9462

2024-08-01 matanlurey@users.noreply.github.com Fix local testing, gradle XML errors, and enable on CI. (flutter/flutter#152383)
2024-08-01 32538273+ValentinVignal@users.noreply.github.com Fix formatting issues in `search_anchor.0_test.dart` (flutter/flutter#152669)
2024-08-01 32538273+ValentinVignal@users.noreply.github.com Add tests for search anchor examples (flutter/flutter#152659)
2024-08-01 engine-flutter-autoroll@skia.org Roll Flutter Engine from 4dc94d6f88ba to 7c4a44611abe (1 revision) (flutter/flutter#152665)
2024-08-01 engine-flutter-autoroll@skia.org Roll Flutter Engine from f546fef7d7cd to 4dc94d6f88ba (1 revision) (flutter/flutter#152663)
2024-08-01 engine-flutter-autoroll@skia.org Roll Flutter Engine from 0fbff219c498 to f546fef7d7cd (2 revisions) (flutter/flutter#152661)
2024-08-01 engine-flutter-autoroll@skia.org Roll Flutter Engine from 32f788823f43 to 0fbff219c498 (5 revisions) (flutter/flutter#152658)
2024-08-01 engine-flutter-autoroll@skia.org Manual roll Flutter Engine from 32f788823f43 to ed95b491f260 (3 revisions) (flutter/flutter#152654)
2024-08-01 engine-flutter-autoroll@skia.org Manual roll Flutter Engine from 16332725788c to 32f788823f43 (11 revisions) (flutter/flutter#152648)
2024-07-31 dkwingsmt@users.noreply.github.com [CupertinoActionSheet] Make `_ActionSheetButtonBackground` stateless (flutter/flutter#152283)
2024-07-31 nate.w5687@gmail.com Implementing null-aware logic in `/packages/flutter/` (flutter/flutter#152294)
2024-07-31 andrewrkolos@gmail.com Reintroduce verbose logging for hot reload flake (flutter/flutter#152639)
2024-07-31 59215665+davidhicks980@users.noreply.github.com [material/menu_anchor.dart] Remove unused early key event listener (flutter/flutter#150915)
2024-07-31 victorsanniay@gmail.com Improve `CupertinoCheckbox` fidelity (flutter/flutter#151441)
2024-07-31 43054281+camsim99@users.noreply.github.com Update docs to support new Android version (flutter/flutter#152503)
2024-07-31 43054281+camsim99@users.noreply.github.com [Android] Update integration test AVD dependency to use Android 35 emulators (flutter/flutter#152498)
2024-07-31 rmolivares@renzo-olivares.dev Shift + click gesture support for SelectionArea on desktop platforms (flutter/flutter#148574)
2024-07-31 tessertaha@gmail.com Add ability to clip `Stepper` step content (flutter/flutter#152370)
2024-07-31 58190796+MitchellGoodwin@users.noreply.github.com Calendar font factor (flutter/flutter#152341)
2024-07-31 ian@hixie.ch Remove redundant usages of zones in skia_client.dart (flutter/flutter#149366)
2024-07-31 34871572+gmackall@users.noreply.github.com Set up tests that verify we can build a fresh counter app across our Gradle/AGP/Kotlin support range (flutter/flutter#151568)
2024-07-31 andrewrkolos@gmail.com remove bringup from Windows tool_integration_tests_* (flutter/flutter#152599)
2024-07-31 38110731+aliasgar4558@users.noreply.github.com � : Animation controller now has ability to repeat animation 'n' no. of times. (flutter/flutter#150764)
2024-07-31 engine-flutter-autoroll@skia.org Roll Flutter Engine from 3b31b21599d1 to 16332725788c (1 revision) (flutter/flutter#152631)
2024-07-31 engine-flutter-autoroll@skia.org Roll Flutter Engine from b73367a30e9b to 3b31b21599d1 (8 revisions) (flutter/flutter#152625)
2024-07-31 engine-flutter-autoroll@skia.org Roll Packages from 99e8606 to 46a712f (8 revisions) (flutter/flutter#152622)
2024-07-31 32538273+ValentinVignal@users.noreply.github.com Add tests for scaffold messenger examples (flutter/flutter#152536)
2024-07-31 32538273+ValentinVignal@users.noreply.github.com Add test for search_anchor.0.dart (flutter/flutter#152371)
2024-07-31 bruno.leroux@gmail.com Use decoration hint text as the default value for dropdown button hints (flutter/flutter#152474)
2024-07-31 bruno.leroux@gmail.com Deprecate invalid InputDecoration.collapsed parameters (flutter/flutter#152486)
2024-07-31 andrewrkolos@gmail.com increase sharding on Windows tool_integration_tests (flutter/flutter#152582)
2024-07-31 engine-flutter-autoroll@skia.org Roll Flutter Engine from e2ece7e58480 to b73367a30e9b (4 revisions) (flutter/flutter#152592)
2024-07-31 engine-flutter-autoroll@skia.org Roll Flutter Engine from 0b42657a184e to e2ece7e58480 (2 revisions) (flutter/flutter#152589)
2024-07-31 engine-flutter-autoroll@skia.org Roll Flutter Engine from 08f9be3ab284 to 0b42657a184e (2 revisions) (flutter/flutter#152586)
2024-07-30 matanlurey@users.noreply.github.com Clarify and cleanup the test-exemption wording in tree-hygiene. (flutter/flutter#152402)
2024-07-30 ditman@gmail.com [web] Set COEP:credentialless on flutter run/drive. (flutter/flutter#152413)
2024-07-30 engine-flutter-autoroll@skia.org Roll Flutter Engine from a4b88a37d511 to 08f9be3ab284 (5 revisions) (flutter/flutter#152583)
2024-07-30 fluttergithubbot@gmail.com Marks Mac platform_channel_sample_test_macos to be flaky (flutter/flutter#151884)
2024-07-30 engine-flutter-autoroll@skia.org Roll Flutter Engine from a6c5ff26c266 to a4b88a37d511 (2 revisions) (flutter/flutter#152575)
2024-07-30 jhy03261997@gmail.com Reland #151599 (Add button semantics in list tile ) with a flag to control behavior.  (flutter/flutter#152526)
2024-07-30 zanderso@users.noreply.github.com Shift macOS/Android tests from Pixel 7 to mokey in staging (flutter/flutter#152571)
2024-07-30 engine-flutter-autoroll@skia.org Roll Flutter Engine from 31bb9f98472a to a6c5ff26c266 (5 revisions) (flutter/flutter#152573)
2024-07-30 engine-flutter-autoroll@skia.org Roll Packages from 247fb5f to 99e8606 (5 revisions) (flutter/flutter#152567)
2024-07-30 tessertaha@gmail.com Fix default avatar icon theme size for Material 2 (flutter/flutter#152307)
...
TytaniumDev pushed a commit to TytaniumDev/flutter that referenced this pull request Aug 7, 2024
…lutter#152283)

This PR is a refactor that makes `_ActionSheetButtonBackground` widgets no longer record their own `pressed` state, but instead receive this state from their parent. In this way, `_ActionSheetButtonBackground` becomes a stateless widget. The children states are duplicate because the parent has to keep track of the state for rendering dividers.

An obstacle with this change is that `_ActionSheetButtonBackground` needs an object that is persistent across rebuilds to provide to `Metadata.data`. Either it is kept as a stateful widget without any actual states, or it is made stateless and its `Element` as the object. After discussion, the first option is used.

`_ActionSheetSlideTarget` is renamed to `_SlideTarget` since the alert dialog will soon use this class as well.

This refactor shouldn't need additional tests. Still, one test is added for a behavior that I broke during development and found not covered by the unit tests then.
Buchimi pushed a commit to Buchimi/flutter that referenced this pull request Sep 2, 2024
…lutter#152283)

This PR is a refactor that makes `_ActionSheetButtonBackground` widgets no longer record their own `pressed` state, but instead receive this state from their parent. In this way, `_ActionSheetButtonBackground` becomes a stateless widget. The children states are duplicate because the parent has to keep track of the state for rendering dividers.

An obstacle with this change is that `_ActionSheetButtonBackground` needs an object that is persistent across rebuilds to provide to `Metadata.data`. Either it is kept as a stateful widget without any actual states, or it is made stateless and its `Element` as the object. After discussion, the first option is used.

`_ActionSheetSlideTarget` is renamed to `_SlideTarget` since the alert dialog will soon use this class as well.

This refactor shouldn't need additional tests. Still, one test is added for a behavior that I broke during development and found not covered by the unit tests then.
engine-flutter-autoroll added a commit to engine-flutter-autoroll/packages that referenced this pull request Dec 11, 2024
engine-flutter-autoroll added a commit to engine-flutter-autoroll/packages that referenced this pull request Dec 12, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

autosubmit Merge PR when tree becomes green via auto submit App f: cupertino flutter/packages/flutter/cupertino repository framework flutter/packages/flutter repository. See also f: labels. will affect goldens Changes to golden files

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants