Skip to content

[cupertino_ui] Fix CupertinoPicker throwing when disposed during the tap-to-select animation - #13012

Merged
auto-submit[bot] merged 1 commit into
flutter:mainfrom
theprantadutta:cupertino_ui/picker-dispose-during-tap
Oct 10, 2026
Merged

auto-submit[bot] merged 1 commit into
flutter:mainfrom
theprantadutta:cupertino_ui/picker-dispose-during-tap

Conversation

@theprantadutta

Copy link
Copy Markdown
Contributor

Tapping an item that isn't centred starts a 300 ms tap-to-select animation, which _CupertinoPickerState._handleChildTap awaits and then reads _effectiveController.selectedItem. If the picker is disposed before that animation finishes, the controller has already been detached, so the read fails: an assertion in debug (FixedExtentScrollController.selectedItem cannot be accessed before a scroll view is built with it.) and StateError: Bad state: No element in release.

It shows up in ordinary "select, then hide" patterns — a parent that removes the picker as soon as a value changes, or a Material bottom sheet (200 ms exit) popped right after a tap. The reporter's analysis in the issue pinned it to this exact line and supplied a deterministic reproduction; credit to them.

The fix returns early after the await when the state is no longer mounted. Nothing after that point matters for a disposed picker — it only restores haptic bookkeeping.

The new test taps an off-centre item, removes the picker 50 ms into the animation, and pumps past the end. It fails on main with the assertion above and passes with the fix. The rest of picker_test.dart (28) and date_picker_test.dart (85), which covers the pickers built on top of CupertinoPicker, pass as well.

Fixes flutter/flutter#192135

Pre-Review Checklist

I used AI tooling while working on this, and reviewed and tested all of it myself.

Footnotes

  1. Regular contributors who have demonstrated familiarity with the repository guidelines only need to comment if the PR is not auto-exempted by repo tooling. ↩ ↩2

@gemini-code-assist gemini-code-assist Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Code Review

This pull request fixes an issue where CupertinoPicker throws an exception if it is disposed during the tap-to-select animation. A check is added to verify if the widget is still mounted after the animation completes before accessing the controller's selected item. Additionally, a regression test and a changelog entry are included. There are no review comments, and I have no feedback to provide.

@QuncCccccc
QuncCccccc requested a review from dkwingsmt October 6, 2026 21:33
@QuncCccccc QuncCccccc added the CICD Run CI/CD label Oct 6, 2026

@dkwingsmt dkwingsmt left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

LGTM

@dkwingsmt
dkwingsmt requested a review from pjkammer October 9, 2026 21:01
@pjkammer pjkammer added the autosubmit Merge PR when tree becomes green via auto submit App label Oct 10, 2026
@auto-submit
auto-submit Bot merged commit 8a74ca8 into flutter:main Oct 10, 2026
12 checks passed
andywolff pushed a commit to andywolff/flutter that referenced this pull request Oct 13, 2026
flutter/packages@d8d9e97...a1ed23c

2026-10-13 [email protected] [material_ui] Clarify Slider labels
for continuous sliders (flutter/packages#13121)
2026-10-12 [email protected] [in_app_purchase_storekit] Remove
availability checks below the package minimum iOS 13 and macOS 10.15
(flutter/packages#13217)
2026-10-12 [email protected] [google_sign_in] Convert unit tests
to Kotlin (flutter/packages#13000)
2026-10-12 [email protected]
[vector_graphics_compiler] Support SVG alpha masks (mask-type="alpha")
(flutter/packages#13025)
2026-10-11 [email protected] [camera_platform_interface] Add
zero-shutter-lag API (flutter/packages#12996)
2026-10-10 [email protected] [material_ui]
Ensure textScaler is taken into account for SnackBar action overflow
(flutter/packages#12737)
2026-10-10 [email protected] [material_ui] Add more 0x0 size tests
part 14 (flutter/packages#13107)
2026-10-10 [email protected]
[cupertino_ui] Fix CupertinoPicker throwing when disposed during the
tap-to-select animation (flutter/packages#13012)
2026-10-09 [email protected] Roll Flutter (stable) from
5fc3468 to abaf9c5 (3 revisions) (flutter/packages#13186)

If this roll has caused a breakage, revert this CL and set the roller
to dry run mode using the controls here:
https://autoroll.skia.org/r/flutter-packages-flutter-autoroll
Please CC [email protected] on the revert to ensure that a
human
is aware of the problem.

To file a bug in Flutter:
https://github.com/flutter/flutter/issues/new/choose

To report a problem with the AutoRoller itself, please file a bug:
https://issues.skia.org/issues/new?component=1389291&template=1850622

Documentation for the AutoRoller is here:
https://skia.googlesource.com/buildbot/+doc/main/autoroll/README.md
suryaKommana2662 pushed a commit to suryaKommana2662/flutter that referenced this pull request Oct 29, 2026
flutter/packages@d8d9e97...a1ed23c

2026-10-13 [email protected] [material_ui] Clarify Slider labels
for continuous sliders (flutter/packages#13121)
2026-10-12 [email protected] [in_app_purchase_storekit] Remove
availability checks below the package minimum iOS 13 and macOS 10.15
(flutter/packages#13217)
2026-10-12 [email protected] [google_sign_in] Convert unit tests
to Kotlin (flutter/packages#13000)
2026-10-12 [email protected]
[vector_graphics_compiler] Support SVG alpha masks (mask-type="alpha")
(flutter/packages#13025)
2026-10-11 [email protected] [camera_platform_interface] Add
zero-shutter-lag API (flutter/packages#12996)
2026-10-10 [email protected] [material_ui]
Ensure textScaler is taken into account for SnackBar action overflow
(flutter/packages#12737)
2026-10-10 [email protected] [material_ui] Add more 0x0 size tests
part 14 (flutter/packages#13107)
2026-10-10 [email protected]
[cupertino_ui] Fix CupertinoPicker throwing when disposed during the
tap-to-select animation (flutter/packages#13012)
2026-10-09 [email protected] Roll Flutter (stable) from
5fc3468 to abaf9c5 (3 revisions) (flutter/packages#13186)

If this roll has caused a breakage, revert this CL and set the roller
to dry run mode using the controls here:
https://autoroll.skia.org/r/flutter-packages-flutter-autoroll
Please CC [email protected] on the revert to ensure that a
human
is aware of the problem.

To file a bug in Flutter:
https://github.com/flutter/flutter/issues/new/choose

To report a problem with the AutoRoller itself, please file a bug:
https://issues.skia.org/issues/new?component=1389291&template=1850622

Documentation for the AutoRoller is here:
https://skia.googlesource.com/buildbot/+doc/main/autoroll/README.md
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 CICD Run CI/CD p: cupertino_ui triage-design Should be looked at in design triage

Projects

None yet

Development

Successfully merging this pull request may close these issues.

CupertinoPicker tap-to-select throws "Bad state: No element" when the picker is disposed during the tap animation

4 participants