Skip to content

Conversation

@dkwingsmt
Copy link
Contributor

@dkwingsmt dkwingsmt commented Aug 22, 2025

Fix #174246

Before:

Screen.Recording.2025-08-29.at.3.46.47.PM.mp4

After:

Screen.Recording.2025-08-29.at.3.48.29.PM.mp4

This PR is not a result of a thorough fix for mouse cursors on all platforms, but simply matching the behavior of SelectionArea on Web to that on non-Web.

A central question lies how a platform view widget should control the mouse cursor. On the surface, the answer is simple: it doesn't, and let the view content to control (hence the MouseCursor.uncontrolled constant). But what if the empty region of the view content doesn't control the cursor at all? This would be a problem even on non-Web, because if neither the view content nor the view controls the cursor on non-Web, then the user will find the cursor remaining the one used by the last region, which would be different when entering and when leaving, the same bug as #174246 . On the other hand, what is it supposed to fall back to if the view content doesn't define a cursor? Is the default cursor the logically correct option? ...

I decided that I did not want to dig too much into the details, and instead focus on this specific issue. I tried the repro app on macOS and found that the empty region of SelectionArea falls back to the widget behind it, the same behavior as MouseCursor.defer. Therefore in this PR I made MouseCursor.uncontrolled essentially the same as .defer on Web, matching the behavior across platforms.

Pre-launch Checklist

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

Note: The Flutter team is currently trialing the use of Gemini Code Assist for GitHub. Comments from the gemini-code-assist bot should not be taken as authoritative feedback from the Flutter team. If you find its comments useful you can update your code accordingly, but if you are unsure or disagree with the feedback, please feel free to wait for a Flutter team member's review for guidance on which automated comments should be addressed.

@github-actions github-actions bot added the framework flutter/packages/flutter repository. See also f: labels. label Aug 22, 2025
@dkwingsmt dkwingsmt force-pushed the fix-platform-view-cursor branch from 79adc8e to 14d3ade Compare August 23, 2025 00:02
@github-actions github-actions bot added the f: material design flutter/packages/flutter/material repository. label Aug 29, 2025
@dkwingsmt dkwingsmt marked this pull request as ready for review August 29, 2025 23:17
@mdebbar mdebbar self-requested a review September 2, 2025 15:00
@mdebbar
Copy link
Contributor

mdebbar commented Sep 2, 2025

This new behavior makes sense for the specific platform view used by SelectionArea, but I worry that it may not be ideal to generalize it for all platform views. On the web, it's better to let the contents of platform views decide their cursor (at least by default).

@dkwingsmt
Copy link
Contributor Author

dkwingsmt commented Sep 15, 2025

I've tested the cursor behavior. The following app is a MouseRegion(cursor: SystemMouseCursors.grab) wrapping around a WebViewWidget. As you can see, as soon as the cursor moves within the webview it turns into the default cursor. Does this resolve your concern?

Screen.Recording.2025-09-15.at.4.40.34.PM.mp4
Code ```dart import 'package:flutter/material.dart'; import 'package:webview_flutter/webview_flutter.dart';

const kStartUrl = 'https://example.com';

void main() {
runApp(const CenteredWebViewApp());
}

class CenteredWebViewApp extends StatelessWidget {
const CenteredWebViewApp({super.key});

@OverRide
Widget build(BuildContext context) {
return const MaterialApp(
home: CenteredWebViewPage(),
);
}
}

class CenteredWebViewPage extends StatefulWidget {
const CenteredWebViewPage({super.key});

@OverRide
State createState() => _CenteredWebViewPageState();
}

class _CenteredWebViewPageState extends State {
late final WebViewController _controller;

@OverRide
void initState() {
super.initState();
_controller = WebViewController()
..loadRequest(Uri.parse(kStartUrl));
}

@OverRide
Widget build(BuildContext context) {
return Scaffold(
body: MouseRegion(
cursor: SystemMouseCursors.grab,
child: Center(
child: LayoutBuilder(
builder: (context, constraints) {
final double width =
(constraints.maxWidth * 0.8).clamp(480, 1100);
final double height =
(constraints.maxHeight * 0.8).clamp(360, 800);

          return Container(
            width: width,
            height: height,
            decoration: BoxDecoration(
              color: Theme.of(context).colorScheme.surface,
              borderRadius: BorderRadius.circular(14),
              boxShadow: const [
                BoxShadow(
                    blurRadius: 20, spreadRadius: 2, offset: Offset(0, 6))
              ],
              border: Border.all(color: Colors.black12),
            ),
            clipBehavior: Clip.antiAlias,
            child: WebViewWidget(controller: _controller),
          );
        },
      ),
    ),
  ),
);

}
}


</details>

@dkwingsmt dkwingsmt changed the title Correctly implement MouseCursor.uncontrolled on Web Correctly implement PlatformViews' cursors on Web Sep 19, 2025
@dkwingsmt
Copy link
Contributor Author

dkwingsmt commented Sep 19, 2025

I talked with @mdebbar offline. For the record, Mouad was curious it would work even though the webview region of the Flutter view was assigned with a different cursor (such as the .grab), and my theory was that the DOM of the webview obstructed hit testing at an OS level and therefore Flutter view's cursor is not even used.

Mouad then pointed out that changing.uncontrolled's behavior so that it defers on Web will make its document wrong, and instead of changing the document as well, he suggested changing _PlatformViewGestureMixin, which I adopted.

Copy link
Contributor

@mdebbar mdebbar 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 Sep 19, 2025
@auto-submit auto-submit bot removed the autosubmit Merge PR when tree becomes green via auto submit App label Sep 19, 2025
@auto-submit
Copy link
Contributor

auto-submit bot commented Sep 19, 2025

autosubmit label was removed for flutter/flutter/174300, because - The status or check suite Google testing has failed. Please fix the issues identified (or deflake) before re-applying this label.

@dkwingsmt dkwingsmt added the autosubmit Merge PR when tree becomes green via auto submit App label Sep 21, 2025
@auto-submit auto-submit bot added this pull request to the merge queue Sep 21, 2025
Merged via the queue into flutter:master with commit 8040ebc Sep 21, 2025
81 checks passed
@flutter-dashboard flutter-dashboard bot removed the autosubmit Merge PR when tree becomes green via auto submit App label Sep 21, 2025
engine-flutter-autoroll added a commit to engine-flutter-autoroll/packages that referenced this pull request Sep 21, 2025
engine-flutter-autoroll added a commit to engine-flutter-autoroll/packages that referenced this pull request Sep 21, 2025
engine-flutter-autoroll added a commit to engine-flutter-autoroll/packages that referenced this pull request Sep 22, 2025
engine-flutter-autoroll added a commit to engine-flutter-autoroll/packages that referenced this pull request Sep 22, 2025
engine-flutter-autoroll added a commit to engine-flutter-autoroll/packages that referenced this pull request Sep 23, 2025
engine-flutter-autoroll added a commit to engine-flutter-autoroll/packages that referenced this pull request Sep 23, 2025
engine-flutter-autoroll added a commit to engine-flutter-autoroll/packages that referenced this pull request Sep 23, 2025
engine-flutter-autoroll added a commit to engine-flutter-autoroll/packages that referenced this pull request Sep 23, 2025
engine-flutter-autoroll added a commit to engine-flutter-autoroll/packages that referenced this pull request Sep 23, 2025
engine-flutter-autoroll added a commit to engine-flutter-autoroll/packages that referenced this pull request Sep 23, 2025
engine-flutter-autoroll added a commit to engine-flutter-autoroll/packages that referenced this pull request Sep 23, 2025
engine-flutter-autoroll added a commit to engine-flutter-autoroll/packages that referenced this pull request Sep 23, 2025
auto-submit bot pushed a commit to flutter/packages that referenced this pull request Sep 24, 2025
…10067)

Manual roll requested by [email protected]

flutter/flutter@9ff2767...4a04204

2025-09-23 [email protected] Simplify asserts in `FlutterMutatorTest` (flutter/flutter#175730)
2025-09-23 [email protected] Improve code quality in `AccessibilityBridgeTest.java` (flutter/flutter#175718)
2025-09-23 [email protected] Fix linter issues in `VsyncWaiterTest` Capital L for long values (flutter/flutter#175780)
2025-09-23 [email protected] Fix wrong order of asserts arguments (flutter/flutter#175726)
2025-09-23 [email protected] Simplify test asserts and use lambdas  (flutter/flutter#175727)
2025-09-23 [email protected] Remove unused imports, fix assertion order, add non null annotations to `ImageReaderPlatformViewRenderTargetTest.java` (flutter/flutter#175723)
2025-09-23 [email protected] Remove unnecessary `String.valueOf` in `KeyboardManager.java` (flutter/flutter#175502)
2025-09-23 [email protected] Fix outdated link of `intl` package to point to the correct new location  (flutter/flutter#174498)
2025-09-23 [email protected] Roll Packages from 45c9a84 to 3413b65 (4 revisions) (flutter/flutter#175854)
2025-09-23 [email protected] Fix typo in tests `README` (flutter/flutter#175788)
2025-09-23 [email protected] Update maximum known Gradle version to 9.1.0 (flutter/flutter#175543)
2025-09-23 [email protected] Roll Dart SDK from 9e943fe076c8 to 14b4ced3022a (5 revisions) (flutter/flutter#175843)
2025-09-23 [email protected] Document how to hide counter in TextField.maxLength (flutter/flutter#175797)
2025-09-23 [email protected] [a11y-app] Fix Autocomplete semantics label (flutter/flutter#175409)
2025-09-23 [email protected] Roll Fuchsia Linux SDK from CcCe3HpQtBYhTZscb... to naeytagBIBEpKgZNZ... (flutter/flutter#175824)
2025-09-23 [email protected] Roll Skia from a38a531dec1d to cabeab8cb22c (16 revisions) (flutter/flutter#175822)
2025-09-23 [email protected] Load fonts in the order addFont is called (flutter/flutter#174253)
2025-09-22 [email protected] Roll pub packages (flutter/flutter#175545)
2025-09-22 [email protected] Remove `name` field form `SupportedPlatform` enum (flutter/flutter#175611)
2025-09-22 [email protected] [web] Cleanup opportunities post renderer unification (flutter/flutter#174659)
2025-09-22 [email protected] Update `KeyChannelResponder.java`  to use method reference  (flutter/flutter#175510)
2025-09-22 [email protected] Update docs/engine/contributing/Compiling-the-engine.md with macOS build steps (flutter/flutter#175716)
2025-09-22 [email protected] [ Widget Preview ] Allow for custom `Preview` annotations, add support for runtime transformations (flutter/flutter#175535)
2025-09-22 [email protected] Remove unnecessary public modifier in `KeyboardManager.java` (flutter/flutter#175500)
2025-09-22 [email protected] bump robolectric and java to 21 (flutter/flutter#175550)
2025-09-22 [email protected] Fix: Update docs tool tag to sample in ImageProvider (flutter/flutter#175256)
2025-09-22 [email protected]  Roll Packages from 3d5c419 to 45c9a84 (flutter/flutter#175794)
2025-09-21 [email protected] Correctly implement PlatformViews' cursors on Web (flutter/flutter#174300)

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.

To file a bug in Packages: 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
Jaineel-Mamtora pushed a commit to Jaineel-Mamtora/flutter_forked that referenced this pull request Sep 24, 2025
Fix flutter#174246

Before: 


https://github.com/user-attachments/assets/33d2a476-d9c4-46e1-a5c5-ea8e602060d6

After: 


https://github.com/user-attachments/assets/383e4a01-4b8e-4c0e-a5a4-fa0d1fc28b67

This PR is not a result of a thorough fix for mouse cursors on all
platforms, but simply matching the behavior of `SelectionArea` on Web to
that on non-Web.

A central question lies how a platform view widget should control the
mouse cursor. On the surface, the answer is simple: it doesn't, and let
the view content to control (hence the `MouseCursor.uncontrolled`
constant). But what if the empty region of the view content doesn't
control the cursor at all? This would be a problem even on non-Web,
because if neither the view content nor the view controls the cursor on
non-Web, then the user will find the cursor remaining the one used by
the last region, which would be different when entering and when
leaving, the same bug as
flutter#174246 . On the other hand,
what is it supposed to fall back to if the view content doesn't define a
cursor? Is the default cursor the logically correct option? ...

I decided that I did not want to dig too much into the details, and
instead focus on this specific issue. I tried the repro app on macOS and
found that the empty region of `SelectionArea` falls back to the widget
behind it, the same behavior as `MouseCursor.defer`. Therefore in this
PR I made `MouseCursor.uncontrolled` essentially the same as `.defer` on
Web, matching the behavior across platforms.







## Pre-launch Checklist

- [ ] I read the [Contributor Guide] and followed the process outlined
there for submitting PRs.
- [ ] I read the [Tree Hygiene] wiki page, which explains my
responsibilities.
- [ ] I read and followed the [Flutter Style Guide], including [Features
we expect every widget to implement].
- [ ] I signed the [CLA].
- [ ] I listed at least one issue that this PR fixes in the description
above.
- [ ] I updated/added relevant documentation (doc comments with `///`).
- [ ] I added new tests to check the change I am making, or this PR is
[test-exempt].
- [ ] I followed the [breaking change policy] and added [Data Driven
Fixes] where supported.
- [ ] All existing and new tests are passing.

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

**Note**: The Flutter team is currently trialing the use of [Gemini Code
Assist for
GitHub](https://developers.google.com/gemini-code-assist/docs/review-github-code).
Comments from the `gemini-code-assist` bot should not be taken as
authoritative feedback from the Flutter team. If you find its comments
useful you can update your code accordingly, but if you are unsure or
disagree with the feedback, please feel free to wait for a Flutter team
member's review for guidance on which automated comments should be
addressed.

<!-- Links -->
[Contributor Guide]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#overview
[Tree Hygiene]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md
[test-exempt]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#tests
[Flutter Style Guide]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md
[Features we expect every widget to implement]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md#features-we-expect-every-widget-to-implement
[CLA]: https://cla.developers.google.com/
[flutter/tests]: https://github.com/flutter/tests
[breaking change policy]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#handling-breaking-changes
[Discord]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Chat.md
[Data Driven Fixes]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Data-driven-Fixes.md
engine-flutter-autoroll added a commit to engine-flutter-autoroll/packages that referenced this pull request Nov 12, 2025
lucaantonelli pushed a commit to lucaantonelli/flutter that referenced this pull request Nov 21, 2025
Fix flutter#174246

Before: 


https://github.com/user-attachments/assets/33d2a476-d9c4-46e1-a5c5-ea8e602060d6

After: 


https://github.com/user-attachments/assets/383e4a01-4b8e-4c0e-a5a4-fa0d1fc28b67

This PR is not a result of a thorough fix for mouse cursors on all
platforms, but simply matching the behavior of `SelectionArea` on Web to
that on non-Web.

A central question lies how a platform view widget should control the
mouse cursor. On the surface, the answer is simple: it doesn't, and let
the view content to control (hence the `MouseCursor.uncontrolled`
constant). But what if the empty region of the view content doesn't
control the cursor at all? This would be a problem even on non-Web,
because if neither the view content nor the view controls the cursor on
non-Web, then the user will find the cursor remaining the one used by
the last region, which would be different when entering and when
leaving, the same bug as
flutter#174246 . On the other hand,
what is it supposed to fall back to if the view content doesn't define a
cursor? Is the default cursor the logically correct option? ...

I decided that I did not want to dig too much into the details, and
instead focus on this specific issue. I tried the repro app on macOS and
found that the empty region of `SelectionArea` falls back to the widget
behind it, the same behavior as `MouseCursor.defer`. Therefore in this
PR I made `MouseCursor.uncontrolled` essentially the same as `.defer` on
Web, matching the behavior across platforms.







## Pre-launch Checklist

- [ ] I read the [Contributor Guide] and followed the process outlined
there for submitting PRs.
- [ ] I read the [Tree Hygiene] wiki page, which explains my
responsibilities.
- [ ] I read and followed the [Flutter Style Guide], including [Features
we expect every widget to implement].
- [ ] I signed the [CLA].
- [ ] I listed at least one issue that this PR fixes in the description
above.
- [ ] I updated/added relevant documentation (doc comments with `///`).
- [ ] I added new tests to check the change I am making, or this PR is
[test-exempt].
- [ ] I followed the [breaking change policy] and added [Data Driven
Fixes] where supported.
- [ ] All existing and new tests are passing.

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

**Note**: The Flutter team is currently trialing the use of [Gemini Code
Assist for
GitHub](https://developers.google.com/gemini-code-assist/docs/review-github-code).
Comments from the `gemini-code-assist` bot should not be taken as
authoritative feedback from the Flutter team. If you find its comments
useful you can update your code accordingly, but if you are unsure or
disagree with the feedback, please feel free to wait for a Flutter team
member's review for guidance on which automated comments should be
addressed.

<!-- Links -->
[Contributor Guide]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#overview
[Tree Hygiene]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md
[test-exempt]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#tests
[Flutter Style Guide]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md
[Features we expect every widget to implement]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md#features-we-expect-every-widget-to-implement
[CLA]: https://cla.developers.google.com/
[flutter/tests]: https://github.com/flutter/tests
[breaking change policy]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#handling-breaking-changes
[Discord]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Chat.md
[Data Driven Fixes]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Data-driven-Fixes.md
reidbaker pushed a commit to AbdeMohlbi/flutter that referenced this pull request Dec 10, 2025
Fix flutter#174246

Before: 


https://github.com/user-attachments/assets/33d2a476-d9c4-46e1-a5c5-ea8e602060d6

After: 


https://github.com/user-attachments/assets/383e4a01-4b8e-4c0e-a5a4-fa0d1fc28b67

This PR is not a result of a thorough fix for mouse cursors on all
platforms, but simply matching the behavior of `SelectionArea` on Web to
that on non-Web.

A central question lies how a platform view widget should control the
mouse cursor. On the surface, the answer is simple: it doesn't, and let
the view content to control (hence the `MouseCursor.uncontrolled`
constant). But what if the empty region of the view content doesn't
control the cursor at all? This would be a problem even on non-Web,
because if neither the view content nor the view controls the cursor on
non-Web, then the user will find the cursor remaining the one used by
the last region, which would be different when entering and when
leaving, the same bug as
flutter#174246 . On the other hand,
what is it supposed to fall back to if the view content doesn't define a
cursor? Is the default cursor the logically correct option? ...

I decided that I did not want to dig too much into the details, and
instead focus on this specific issue. I tried the repro app on macOS and
found that the empty region of `SelectionArea` falls back to the widget
behind it, the same behavior as `MouseCursor.defer`. Therefore in this
PR I made `MouseCursor.uncontrolled` essentially the same as `.defer` on
Web, matching the behavior across platforms.







## Pre-launch Checklist

- [ ] I read the [Contributor Guide] and followed the process outlined
there for submitting PRs.
- [ ] I read the [Tree Hygiene] wiki page, which explains my
responsibilities.
- [ ] I read and followed the [Flutter Style Guide], including [Features
we expect every widget to implement].
- [ ] I signed the [CLA].
- [ ] I listed at least one issue that this PR fixes in the description
above.
- [ ] I updated/added relevant documentation (doc comments with `///`).
- [ ] I added new tests to check the change I am making, or this PR is
[test-exempt].
- [ ] I followed the [breaking change policy] and added [Data Driven
Fixes] where supported.
- [ ] All existing and new tests are passing.

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

**Note**: The Flutter team is currently trialing the use of [Gemini Code
Assist for
GitHub](https://developers.google.com/gemini-code-assist/docs/review-github-code).
Comments from the `gemini-code-assist` bot should not be taken as
authoritative feedback from the Flutter team. If you find its comments
useful you can update your code accordingly, but if you are unsure or
disagree with the feedback, please feel free to wait for a Flutter team
member's review for guidance on which automated comments should be
addressed.

<!-- Links -->
[Contributor Guide]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#overview
[Tree Hygiene]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md
[test-exempt]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#tests
[Flutter Style Guide]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md
[Features we expect every widget to implement]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md#features-we-expect-every-widget-to-implement
[CLA]: https://cla.developers.google.com/
[flutter/tests]: https://github.com/flutter/tests
[breaking change policy]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#handling-breaking-changes
[Discord]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Chat.md
[Data Driven Fixes]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Data-driven-Fixes.md
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

f: material design flutter/packages/flutter/material repository. framework flutter/packages/flutter repository. See also f: labels.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

SelectionArea incorrectly retains mouse cursor on Web

2 participants