-
Notifications
You must be signed in to change notification settings - Fork 29.7k
Fix crash on two finger selection gesture #168598
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
Fix crash on two finger selection gesture #168598
Conversation
a2a7349 to
865f12d
Compare
865f12d to
1d640fa
Compare
1d640fa to
d4b904c
Compare
| ); | ||
| _dragStartSelection ??= _selection; | ||
| _dragStartSelection = | ||
| defaultTargetPlatform == TargetPlatform.iOS || defaultTargetPlatform == TargetPlatform.macOS |
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.
Consider adding a quick comment here. It's not immediately obvious to me why we behave differently here based on the platform.
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.
I kinda thought the same thing while reviewing 👍
justinmc
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.
One idea below to possibly reduce the amount of state, otherwise LGTM 👍
| _dragStartSelection = | ||
| defaultTargetPlatform == TargetPlatform.iOS || defaultTargetPlatform == TargetPlatform.macOS | ||
| ? _selection | ||
| : null; |
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.
Just double checking a logical difference: after this change, on iOS/macOS, it's possible that _dragStartSelection will be overwritten when it is non-null, but previously it wouldn't have been.
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.
Good catch, I didn't notice that. I'll update it to meet the original logical difference. It should still only be set on Apple platforms.
| _isDraggingEndHandle = false; | ||
| return; | ||
| } | ||
| if (_blockEndHandleDrag) { |
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.
I wonder if you could get rid of the _blockStart/EndHandleDrag booleans by checking something like this here instead:
_isDraggingStartHandle && defaultTargetPlatform == TargetPlatform.iOS || defaultTargetPlatform == TargetPlatform.macOS || kIsWebThat could be a getter to make things cleaner.
| ); | ||
| final TestGesture gesture = await tester.startGesture( | ||
| textOffsetToPosition(paragraph, 11), | ||
| ); // at the 'a' |
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.
Should this be 'e' pos?
Same comment for code below
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.
Good catch thanks!
loic-sharma
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, nice work!
1ef0af6 to
fdde5a2
Compare
e95427b to
290cff8
Compare
justinmc
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 👍
| // On Apple and web platforms only one selection handle can be dragged | ||
| // at a time, so when the start handle is being dragged on these platforms | ||
| // the the end handle cannot be dragged. | ||
| bool get _canDragEndHandle => |
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.
I think these getters and the early returns are really easy to follow now 👍
|
Still looking into an issue with the magnifier after this change. |
aa7aa8b to
8a9db17
Compare
… in progress (even if blocked by _canDrag*Handle)
…lling editableText.showMagnifier
dc74d0b to
11a1205
Compare
justinmc
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 👍 . The main magnifier fix you mentioned since last time is 42f1efe right?
Roll Flutter from 33cdd8ef31dc to 85564cbba9e7 (39 revisions) flutter/flutter@33cdd8e...85564cb 2025-05-23 98614782+auto-submit[bot]@users.noreply.github.com Reverts "[Reland2] Implements UISceneDelegate dynamically w/ FlutterLaunchEngine (#169276)" (flutter/flutter#169347) 2025-05-23 [email protected] Roll Skia from a01ea49f53a4 to 956fd8b14e22 (1 revision) (flutter/flutter#169334) 2025-05-23 [email protected] Roll Dart SDK from 4de10a11ceb9 to 085f110ecf33 (1 revision) (flutter/flutter#169333) 2025-05-23 [email protected] Roll Skia from bcc7e7fce10e to a01ea49f53a4 (1 revision) (flutter/flutter#169329) 2025-05-23 [email protected] Roll Skia from 18b85aced9b7 to bcc7e7fce10e (3 revisions) (flutter/flutter#169323) 2025-05-23 [email protected] Roll Dart SDK from 2a45b2f88a4f to 4de10a11ceb9 (2 revisions) (flutter/flutter#169322) 2025-05-23 [email protected] Remove patching of `package_config.json` from Flutter Pub wrapper. (flutter/flutter#169306) 2025-05-23 [email protected] Add missing dart_dynamic_modules flag for iOS DDM simulator builds (flutter/flutter#169254) 2025-05-23 [email protected] Roll Skia from ea73ccdc1417 to 18b85aced9b7 (6 revisions) (flutter/flutter#169315) 2025-05-23 [email protected] Add flag to exclude focus for hidden children in Visibility, maintainFocusability. Set maintainFocusability to false in IndexedStack (flutter/flutter#159133) 2025-05-23 [email protected] [Reland2] Implements UISceneDelegate dynamically w/ FlutterLaunchEngine (flutter/flutter#169276) 2025-05-23 [email protected] Roll Dart SDK from 8f85d89fdc23 to 2a45b2f88a4f (6 revisions) (flutter/flutter#169312) 2025-05-23 [email protected] Removes unnecessary parentheses (flutter/flutter#169015) 2025-05-22 [email protected] Unpin test/test_core/test_api packages (flutter/flutter#169198) 2025-05-22 [email protected] [Engine] Fix an edge case of RoundSuperellipseParam::Contains with sharp corners (flutter/flutter#167977) 2025-05-22 [email protected] Replace goldens in test/cupertino/nav_bar_transition_test.dart (flutter/flutter#169172) 2025-05-22 [email protected] Roll Skia from 13a299964c9f to ea73ccdc1417 (35 revisions) (flutter/flutter#169303) 2025-05-22 [email protected] Increase sub-task timeout for Mac web_tool_tests (flutter/flutter#169307) 2025-05-22 [email protected] Fix crash on two finger selection gesture (flutter/flutter#168598) 2025-05-22 [email protected] Disable the ability to opt-out of `explicit-package-dependencies`. (flutter/flutter#169283) 2025-05-22 [email protected] Fixes tab semantics gets dropped if the child produce a semantics node (flutter/flutter#169233) 2025-05-22 [email protected] Skip `{PLAT}_web_tools_test#expression_evaluation_*_test.dart`, turning tree 🔴 (flutter/flutter#169305) 2025-05-22 [email protected] Update tool-internal `generateLocalizations...()` to never use synthetic (`flutter_gen`) packages (flutter/flutter#169285) 2025-05-22 98614782+auto-submit[bot]@users.noreply.github.com Reverts "Make `build_android_host_app_with_module_aar` build using an aar (#169171)" (flutter/flutter#169287) 2025-05-22 [email protected] Increase sub-task timeout for `web_tool_tests_1_2` (flutter/flutter#169277) 2025-05-22 [email protected] refactor the usage of `MediaQuery.sizeOf(context).height` to use the new `.heightOf(context)` (flutter/flutter#168894) 2025-05-22 [email protected] [tool] Add --no-minify flag to JS Compiler (flutter/flutter#169102) 2025-05-22 [email protected] Update ButtonStyle documentation (flutter/flutter#168062) 2025-05-22 [email protected] Fix the issue where DropdownMenu disposes of the controller. (flutter/flutter#168541) 2025-05-22 [email protected] Add bottomSheetScrimBuilder to Scaffold (flutter/flutter#167335) 2025-05-22 98614782+auto-submit[bot]@users.noreply.github.com Reverts "[Reland] Implements UISceneDelegate dynamically w/ FlutterLaunchEngine (#168396) (#168914)" (flutter/flutter#169250) 2025-05-21 [email protected] Roll Dart SDK from 56940edd099d to 8f85d89fdc23 (6 revisions) (flutter/flutter#169237) 2025-05-21 [email protected] Use gestureSettings.touchSlop in PrimaryPointerGestureRecognizer (flutter/flutter#161549) 2025-05-21 [email protected] Normalize BottomAppBarTheme (continue) (flutter/flutter#168966) 2025-05-21 [email protected] [Reland] Implements UISceneDelegate dynamically w/ FlutterLaunchEngine (#168396) (flutter/flutter#168914) 2025-05-21 [email protected] Respect `calendarDelegate` in `showDateRangePicker` (flutter/flutter#168290) 2025-05-21 [email protected] Make `build_android_host_app_with_module_aar` build using an aar (flutter/flutter#169171) 2025-05-21 [email protected] Roll Dart SDK from 7c40eba6bf77 to 56940edd099d (flutter/flutter#169135) 2025-05-21 [email protected] Feat: Add full screen dialog support for dialog routes (flutter/flutter#167794) If this roll has caused a breakage, revert this CL and stop the roller using the controls here: https://autoroll.skia.org/r/flutter-packages Please CC [email protected],[email protected] on the revert to ensure that a human is aware of the problem. ...
…r#9315) Roll Flutter from 33cdd8ef31dc to 85564cbba9e7 (39 revisions) flutter/flutter@33cdd8e...85564cb 2025-05-23 98614782+auto-submit[bot]@users.noreply.github.com Reverts "[Reland2] Implements UISceneDelegate dynamically w/ FlutterLaunchEngine (#169276)" (flutter/flutter#169347) 2025-05-23 [email protected] Roll Skia from a01ea49f53a4 to 956fd8b14e22 (1 revision) (flutter/flutter#169334) 2025-05-23 [email protected] Roll Dart SDK from 4de10a11ceb9 to 085f110ecf33 (1 revision) (flutter/flutter#169333) 2025-05-23 [email protected] Roll Skia from bcc7e7fce10e to a01ea49f53a4 (1 revision) (flutter/flutter#169329) 2025-05-23 [email protected] Roll Skia from 18b85aced9b7 to bcc7e7fce10e (3 revisions) (flutter/flutter#169323) 2025-05-23 [email protected] Roll Dart SDK from 2a45b2f88a4f to 4de10a11ceb9 (2 revisions) (flutter/flutter#169322) 2025-05-23 [email protected] Remove patching of `package_config.json` from Flutter Pub wrapper. (flutter/flutter#169306) 2025-05-23 [email protected] Add missing dart_dynamic_modules flag for iOS DDM simulator builds (flutter/flutter#169254) 2025-05-23 [email protected] Roll Skia from ea73ccdc1417 to 18b85aced9b7 (6 revisions) (flutter/flutter#169315) 2025-05-23 [email protected] Add flag to exclude focus for hidden children in Visibility, maintainFocusability. Set maintainFocusability to false in IndexedStack (flutter/flutter#159133) 2025-05-23 [email protected] [Reland2] Implements UISceneDelegate dynamically w/ FlutterLaunchEngine (flutter/flutter#169276) 2025-05-23 [email protected] Roll Dart SDK from 8f85d89fdc23 to 2a45b2f88a4f (6 revisions) (flutter/flutter#169312) 2025-05-23 [email protected] Removes unnecessary parentheses (flutter/flutter#169015) 2025-05-22 [email protected] Unpin test/test_core/test_api packages (flutter/flutter#169198) 2025-05-22 [email protected] [Engine] Fix an edge case of RoundSuperellipseParam::Contains with sharp corners (flutter/flutter#167977) 2025-05-22 [email protected] Replace goldens in test/cupertino/nav_bar_transition_test.dart (flutter/flutter#169172) 2025-05-22 [email protected] Roll Skia from 13a299964c9f to ea73ccdc1417 (35 revisions) (flutter/flutter#169303) 2025-05-22 [email protected] Increase sub-task timeout for Mac web_tool_tests (flutter/flutter#169307) 2025-05-22 [email protected] Fix crash on two finger selection gesture (flutter/flutter#168598) 2025-05-22 [email protected] Disable the ability to opt-out of `explicit-package-dependencies`. (flutter/flutter#169283) 2025-05-22 [email protected] Fixes tab semantics gets dropped if the child produce a semantics node (flutter/flutter#169233) 2025-05-22 [email protected] Skip `{PLAT}_web_tools_test#expression_evaluation_*_test.dart`, turning tree 🔴 (flutter/flutter#169305) 2025-05-22 [email protected] Update tool-internal `generateLocalizations...()` to never use synthetic (`flutter_gen`) packages (flutter/flutter#169285) 2025-05-22 98614782+auto-submit[bot]@users.noreply.github.com Reverts "Make `build_android_host_app_with_module_aar` build using an aar (#169171)" (flutter/flutter#169287) 2025-05-22 [email protected] Increase sub-task timeout for `web_tool_tests_1_2` (flutter/flutter#169277) 2025-05-22 [email protected] refactor the usage of `MediaQuery.sizeOf(context).height` to use the new `.heightOf(context)` (flutter/flutter#168894) 2025-05-22 [email protected] [tool] Add --no-minify flag to JS Compiler (flutter/flutter#169102) 2025-05-22 [email protected] Update ButtonStyle documentation (flutter/flutter#168062) 2025-05-22 [email protected] Fix the issue where DropdownMenu disposes of the controller. (flutter/flutter#168541) 2025-05-22 [email protected] Add bottomSheetScrimBuilder to Scaffold (flutter/flutter#167335) 2025-05-22 98614782+auto-submit[bot]@users.noreply.github.com Reverts "[Reland] Implements UISceneDelegate dynamically w/ FlutterLaunchEngine (#168396) (#168914)" (flutter/flutter#169250) 2025-05-21 [email protected] Roll Dart SDK from 56940edd099d to 8f85d89fdc23 (6 revisions) (flutter/flutter#169237) 2025-05-21 [email protected] Use gestureSettings.touchSlop in PrimaryPointerGestureRecognizer (flutter/flutter#161549) 2025-05-21 [email protected] Normalize BottomAppBarTheme (continue) (flutter/flutter#168966) 2025-05-21 [email protected] [Reland] Implements UISceneDelegate dynamically w/ FlutterLaunchEngine (#168396) (flutter/flutter#168914) 2025-05-21 [email protected] Respect `calendarDelegate` in `showDateRangePicker` (flutter/flutter#168290) 2025-05-21 [email protected] Make `build_android_host_app_with_module_aar` build using an aar (flutter/flutter#169171) 2025-05-21 [email protected] Roll Dart SDK from 7c40eba6bf77 to 56940edd099d (flutter/flutter#169135) 2025-05-21 [email protected] Feat: Add full screen dialog support for dialog routes (flutter/flutter#167794) If this roll has caused a breakage, revert this CL and stop the roller using the controls here: https://autoroll.skia.org/r/flutter-packages Please CC [email protected],[email protected] on the revert to ensure that a human is aware of the problem. ...
…r#9315) Roll Flutter from 33cdd8ef31dc to 85564cbba9e7 (39 revisions) flutter/flutter@33cdd8e...85564cb 2025-05-23 98614782+auto-submit[bot]@users.noreply.github.com Reverts "[Reland2] Implements UISceneDelegate dynamically w/ FlutterLaunchEngine (#169276)" (flutter/flutter#169347) 2025-05-23 [email protected] Roll Skia from a01ea49f53a4 to 956fd8b14e22 (1 revision) (flutter/flutter#169334) 2025-05-23 [email protected] Roll Dart SDK from 4de10a11ceb9 to 085f110ecf33 (1 revision) (flutter/flutter#169333) 2025-05-23 [email protected] Roll Skia from bcc7e7fce10e to a01ea49f53a4 (1 revision) (flutter/flutter#169329) 2025-05-23 [email protected] Roll Skia from 18b85aced9b7 to bcc7e7fce10e (3 revisions) (flutter/flutter#169323) 2025-05-23 [email protected] Roll Dart SDK from 2a45b2f88a4f to 4de10a11ceb9 (2 revisions) (flutter/flutter#169322) 2025-05-23 [email protected] Remove patching of `package_config.json` from Flutter Pub wrapper. (flutter/flutter#169306) 2025-05-23 [email protected] Add missing dart_dynamic_modules flag for iOS DDM simulator builds (flutter/flutter#169254) 2025-05-23 [email protected] Roll Skia from ea73ccdc1417 to 18b85aced9b7 (6 revisions) (flutter/flutter#169315) 2025-05-23 [email protected] Add flag to exclude focus for hidden children in Visibility, maintainFocusability. Set maintainFocusability to false in IndexedStack (flutter/flutter#159133) 2025-05-23 [email protected] [Reland2] Implements UISceneDelegate dynamically w/ FlutterLaunchEngine (flutter/flutter#169276) 2025-05-23 [email protected] Roll Dart SDK from 8f85d89fdc23 to 2a45b2f88a4f (6 revisions) (flutter/flutter#169312) 2025-05-23 [email protected] Removes unnecessary parentheses (flutter/flutter#169015) 2025-05-22 [email protected] Unpin test/test_core/test_api packages (flutter/flutter#169198) 2025-05-22 [email protected] [Engine] Fix an edge case of RoundSuperellipseParam::Contains with sharp corners (flutter/flutter#167977) 2025-05-22 [email protected] Replace goldens in test/cupertino/nav_bar_transition_test.dart (flutter/flutter#169172) 2025-05-22 [email protected] Roll Skia from 13a299964c9f to ea73ccdc1417 (35 revisions) (flutter/flutter#169303) 2025-05-22 [email protected] Increase sub-task timeout for Mac web_tool_tests (flutter/flutter#169307) 2025-05-22 [email protected] Fix crash on two finger selection gesture (flutter/flutter#168598) 2025-05-22 [email protected] Disable the ability to opt-out of `explicit-package-dependencies`. (flutter/flutter#169283) 2025-05-22 [email protected] Fixes tab semantics gets dropped if the child produce a semantics node (flutter/flutter#169233) 2025-05-22 [email protected] Skip `{PLAT}_web_tools_test#expression_evaluation_*_test.dart`, turning tree 🔴 (flutter/flutter#169305) 2025-05-22 [email protected] Update tool-internal `generateLocalizations...()` to never use synthetic (`flutter_gen`) packages (flutter/flutter#169285) 2025-05-22 98614782+auto-submit[bot]@users.noreply.github.com Reverts "Make `build_android_host_app_with_module_aar` build using an aar (#169171)" (flutter/flutter#169287) 2025-05-22 [email protected] Increase sub-task timeout for `web_tool_tests_1_2` (flutter/flutter#169277) 2025-05-22 [email protected] refactor the usage of `MediaQuery.sizeOf(context).height` to use the new `.heightOf(context)` (flutter/flutter#168894) 2025-05-22 [email protected] [tool] Add --no-minify flag to JS Compiler (flutter/flutter#169102) 2025-05-22 [email protected] Update ButtonStyle documentation (flutter/flutter#168062) 2025-05-22 [email protected] Fix the issue where DropdownMenu disposes of the controller. (flutter/flutter#168541) 2025-05-22 [email protected] Add bottomSheetScrimBuilder to Scaffold (flutter/flutter#167335) 2025-05-22 98614782+auto-submit[bot]@users.noreply.github.com Reverts "[Reland] Implements UISceneDelegate dynamically w/ FlutterLaunchEngine (#168396) (#168914)" (flutter/flutter#169250) 2025-05-21 [email protected] Roll Dart SDK from 56940edd099d to 8f85d89fdc23 (6 revisions) (flutter/flutter#169237) 2025-05-21 [email protected] Use gestureSettings.touchSlop in PrimaryPointerGestureRecognizer (flutter/flutter#161549) 2025-05-21 [email protected] Normalize BottomAppBarTheme (continue) (flutter/flutter#168966) 2025-05-21 [email protected] [Reland] Implements UISceneDelegate dynamically w/ FlutterLaunchEngine (#168396) (flutter/flutter#168914) 2025-05-21 [email protected] Respect `calendarDelegate` in `showDateRangePicker` (flutter/flutter#168290) 2025-05-21 [email protected] Make `build_android_host_app_with_module_aar` build using an aar (flutter/flutter#169171) 2025-05-21 [email protected] Roll Dart SDK from 7c40eba6bf77 to 56940edd099d (flutter/flutter#169135) 2025-05-21 [email protected] Feat: Add full screen dialog support for dialog routes (flutter/flutter#167794) If this roll has caused a breakage, revert this CL and stop the roller using the controls here: https://autoroll.skia.org/r/flutter-packages Please CC [email protected],[email protected] on the revert to ensure that a human is aware of the problem. ...
This change blocks two selection handles from being able to be dragged simultaneously on iOS and the web, this matches the native behavior. On native Android both handles can still be dragged simultaneously this is the behavior observed on Google Keep/ Google Messages and Android's EditText.
Also fixes an issue on iOS where the magnifier would not return after hiding when double tapping and dragging to select and then dragging outside the TextField area. The cause of this issue was because editableText.showMagnifier decides whether to update the magnifier position or show a new one based on whether it was visible, so when it was hidden and we attempt to update it's position, it would try to show a new magnifier which left the magnifier in a broken state. This change makes editableText.showMagnifier depend on whether a magnifier exists instead of just checking it's visibility. Similarly editableText.hideMagnifier now does not depend on the magnifier visibility, instead it internally (selectionOverlay.hideMagnifier) checks if the magnifier exists.
Fixes #168578
Pre-launch Checklist
///).