Support navigation during a Cupertino back gesture#142248
Support navigation during a Cupertino back gesture#142248justinmc merged 7 commits intoflutter:masterfrom
Conversation
| child: Listener( | ||
| onPointerDown: _handlePointerDown, | ||
| behavior: HitTestBehavior.translucent, | ||
| return PopScope( |
There was a problem hiding this comment.
@goderbauer Is there a good way for a route to be informed if it's going to be popped or pushed over? This PopScope setup works for pops, but ideally I want to know if the route has something pushed on top of it, too. I tried watching for changes in PageRoute.isCurrent, but it comes in too late, after the recognizer thinks the drag has ended.
There was a problem hiding this comment.
I don't fully understand what you need or are trying to do... Routes have didChangeNext that informs them if something is added (e.g. pushed) on top of them, but I don't know if this comes early enough?
There was a problem hiding this comment.
Thanks for the suggestion. I tried didChangeNext/Previous by adding a setState in them when I needed to rebuild, but it didn't rebuild fast enough. Actively reading isCurrent/isActive on the route instead of waiting for it to be passed down seems to be fast enough, though 👍 .
|
I think the easiest solution would be to access the current The bool get isOk {
if (_navigator == null) {
return false;
}
final _RouteEntry? currentRouteEntry = _navigator!
._firstRouteEntryWhereOrNull(_RouteEntry.isRoutePredicate(this));
if (currentRouteEntry == null) {
return false;
}
return !const <_RouteLifecycle>[
_RouteLifecycle.popping,
_RouteLifecycle.pushing
].contains(currentRouteEntry.currentState);
}
|
926724d to
45cc90b
Compare
|
@maRci002 I tried your approach but I always seemed to read |
Manual roll Flutter from e02e207 to 0b5cd50 (46 revisions) Manual roll requested by [email protected] flutter/flutter@e02e207...0b5cd50 2024-02-05 [email protected] fix AppBar docs for backgroundColor & foregroundColor (flutter/flutter#142430) 2024-02-04 98614782+auto-submit[bot]@users.noreply.github.com Reverts "Update gradle lockfiles template" (flutter/flutter#142889) 2024-02-04 [email protected] Update gradle lockfiles template (flutter/flutter#140115) 2024-02-04 [email protected] Roll Flutter Engine from 20742e37e54e to f34c658b9600 (1 revision) (flutter/flutter#142876) 2024-02-03 [email protected] Roll Flutter Engine from 23763db72272 to 20742e37e54e (1 revision) (flutter/flutter#142850) 2024-02-03 [email protected] Roll Flutter Engine from fee02145da8c to 23763db72272 (3 revisions) (flutter/flutter#142848) 2024-02-03 [email protected] Roll Flutter Engine from 9869d47a2736 to fee02145da8c (2 revisions) (flutter/flutter#142847) 2024-02-03 [email protected] Roll Flutter Engine from 78c63d3c2c68 to 9869d47a2736 (1 revision) (flutter/flutter#142842) 2024-02-02 [email protected] Roll Flutter Engine from 266d5d0b5588 to 78c63d3c2c68 (1 revision) (flutter/flutter#142836) 2024-02-02 49699333+dependabot[bot]@users.noreply.github.com Bump github/codeql-action from 3.23.2 to 3.24.0 (flutter/flutter#142839) 2024-02-02 49699333+dependabot[bot]@users.noreply.github.com Bump codecov/codecov-action from 3.1.6 to 4.0.1 (flutter/flutter#142838) 2024-02-02 [email protected] Update TextSelectionOverlay (flutter/flutter#142463) 2024-02-02 [email protected] Roll Flutter Engine from e29263212bfd to 266d5d0b5588 (5 revisions) (flutter/flutter#142832) 2024-02-02 [email protected] Fix CupertinoTextSelectionToolbar clipping (flutter/flutter#138195) 2024-02-02 [email protected] Reland "Add support for Gradle Kotlin DSL (#140744)" (flutter/flutter#142752) 2024-02-02 [email protected] Support navigation during a Cupertino back gesture (flutter/flutter#142248) 2024-02-02 [email protected] Avoid depending on files from build_system/targets other than from top level entrypoints in flutter_tools. (flutter/flutter#142760) 2024-02-02 [email protected] Roll Packages from 5b48c44 to d37fb0a (14 revisions) (flutter/flutter#142812) 2024-02-02 [email protected] Add a link the different possible Android virtual device configs (flutter/flutter#142765) 2024-02-02 [email protected] Allow all iOS tests to use either iOS 16 or 17 (flutter/flutter#142714) 2024-02-02 [email protected] Roll Flutter Engine from b35153d00b2e to e29263212bfd (2 revisions) (flutter/flutter#142799) 2024-02-02 [email protected] Roll Flutter Engine from dd4c79a6c864 to b35153d00b2e (10 revisions) (flutter/flutter#142783) 2024-02-02 [email protected] Wasm/JS Dual Compile with the flutter tool (flutter/flutter#141396) 2024-02-02 [email protected] Reland: Added ButtonStyle.foregroundBuilder and ButtonStyle.backgroundBuilder (flutter/flutter#142762) 2024-02-01 [email protected] Use proto name for emulator version and show cipd package version (flutter/flutter#142262) 2024-02-01 [email protected] [github actions] ping actor of workflow on cherry pick pr creation (flutter/flutter#142676) 2024-02-01 [email protected] Marks Linux_android_emu android views to be unflaky (flutter/flutter#142590) 2024-02-01 [email protected] Implement `switch` expressions in `lib/src/material/` (flutter/flutter#142634) 2024-02-01 [email protected] Roll Flutter Engine from 9beb7e82e081 to dd4c79a6c864 (1 revision) (flutter/flutter#142749) 2024-02-01 [email protected] Write Tests for API Example of `form.0.dart` (flutter/flutter#142635) 2024-02-01 [email protected] Make leak_tracking bots sticked to the left even if bot thinks they are non-flacky. (flutter/flutter#142744) 2024-02-01 [email protected] Upload DerivedData logs in CI (flutter/flutter#142643) 2024-02-01 [email protected] Test codesigning xcframeworks in artifacts (flutter/flutter#142666) 2024-02-01 [email protected] Fix gen_defaults test randomness (flutter/flutter#142743) 2024-02-01 98614782+auto-submit[bot]@users.noreply.github.com Reverts "Added ButtonStyle.foregroundBuilder and ButtonStyle.backgroundBuilder" (flutter/flutter#142748) 2024-02-01 [email protected] Roll Flutter Engine from 39415c3eed42 to 9beb7e82e081 (5 revisions) (flutter/flutter#142745) 2024-02-01 [email protected] Remove unused deprecated autoroll mirror-remote flag (flutter/flutter#142738) 2024-02-01 [email protected] Fix leaks in tests. (flutter/flutter#142677) 2024-02-01 [email protected] Roll Flutter Engine from 8c43332c6ffc to 39415c3eed42 (1 revision) (flutter/flutter#142740) 2024-02-01 [email protected] Remove verbose-system-logs on iOS perf tests (flutter/flutter#142739) 2024-02-01 [email protected] Remove outdated arm64_armv7 check (flutter/flutter#142737) 2024-02-01 [email protected] fix CupertinoTabView's Android back button handling with PopScope (flutter/flutter#141604) 2024-02-01 [email protected] Roll Flutter Engine from 68943afd62d1 to 8c43332c6ffc (8 revisions) (flutter/flutter#142726) 2024-02-01 [email protected] Unpin test (flutter/flutter#141427) ...
* master: (45 commits) Reverts "Update gradle lockfiles template" (flutter#142889) Update gradle lockfiles template (flutter#140115) Roll Flutter Engine from 20742e3 to f34c658 (1 revision) (flutter#142876) Roll Flutter Engine from 23763db to 20742e3 (1 revision) (flutter#142850) Roll Flutter Engine from fee0214 to 23763db (3 revisions) (flutter#142848) Roll Flutter Engine from 9869d47 to fee0214 (2 revisions) (flutter#142847) Roll Flutter Engine from 78c63d3 to 9869d47 (1 revision) (flutter#142842) Roll Flutter Engine from 266d5d0 to 78c63d3 (1 revision) (flutter#142836) Bump github/codeql-action from 3.23.2 to 3.24.0 (flutter#142839) Bump codecov/codecov-action from 3.1.6 to 4.0.1 (flutter#142838) Update TextSelectionOverlay (flutter#142463) Roll Flutter Engine from e292632 to 266d5d0 (5 revisions) (flutter#142832) Fix CupertinoTextSelectionToolbar clipping (flutter#138195) Reland "Add support for Gradle Kotlin DSL (flutter#140744)" (flutter#142752) Support navigation during a Cupertino back gesture (flutter#142248) Avoid depending on files from build_system/targets other than from top level entrypoints in flutter_tools. (flutter#142760) Roll Packages from 5b48c44 to d37fb0a (14 revisions) (flutter#142812) Add a link the different possible Android virtual device configs (flutter#142765) Allow all iOS tests to use either iOS 16 or 17 (flutter#142714) Roll Flutter Engine from b35153d to e292632 (2 revisions) (flutter#142799) ...
Programmatically performing navigation during a Cupertino back gesture was causing buggy state. This PR attempts to fix it by canceling the gesture when any navigation happens.
Currently this is just a proof of concept. It only fixes the case of a pop happening during the gesture, but weird things also happen with a push. I tried it, and if I hold the drag gesture so that it's more than halfway back, then it gets stuck when the push happens.
Listening to isCurrent instead of using PopScope didn't work because the change came after the drag gesture had already ended.
CC @maRci002
Fixes #141268
The example app I was ultimately using to test this
Screen.Recording.2024-02-01.at.1.50.46.PM.mov
Screen.Recording.2024-02-01.at.1.55.08.PM.mov