Skip to content

[Web] Rebuilding SelectionArea after disabling context menu triggers assertion failure #186459

@kpsroka-klarmx

Description

@kpsroka-klarmx

Steps to reproduce

  1. Run the sample code on web in debug mode.
  2. Press the "Disable ctx menu" button.

Expected results

Nothing happens.

Actual results

Debug assertion triggers. Red screen appears. Integration tests fail :(

This potentially can cause problems in production as well, but I haven't investigated what are the consequences.

Code sample

Code sample
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';

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

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

  @override
  Widget build(BuildContext context) {
    return MaterialApp(home: const MyScaffold());
  }
}

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

  @override
  State<MyScaffold> createState() => _MyScaffoldState();
}

class _MyScaffoldState extends State<MyScaffold> {
  @override
  Widget build(BuildContext context) {
    return SelectionArea(
      child: Scaffold(
        body: Center(
          child: TextButton(
            child: Text('Disable ctx menu'),
            onPressed: () async {
              await BrowserContextMenu.disableContextMenu();
              setState(() {});
            },
          ),
        ),
      ),
    );
  }
}

Screenshots or Video

No response

Logs

Logs
══╡ EXCEPTION CAUGHT BY WIDGETS LIBRARY ╞═══════════════════════════════════════════════════════════
The following assertion was thrown building SelectableRegionSelectionStatusScope:
Assertion failed:
file:///Users/krzysztof/lib/flutter/packages/flutter/lib/src/widgets/selectable_region.dart:2025:12
_selectable == null
is not true

The relevant error-causing widget was:
  SelectionArea
  SelectionArea:file:///Users/krzysztof/Workspace/web_selectable_region_repro/lib/main.dart:27:12

When the exception was thrown, this was the stack:
dart-sdk/lib/_internal/js_dev_runtime/private/ddc_runtime/errors.dart 274:3       throw_
dart-sdk/lib/_internal/js_dev_runtime/private/ddc_runtime/errors.dart 44:3        assertFailed
package:flutter/src/widgets/selectable_region.dart 2025:24                        add
package:flutter/src/rendering/selection.dart 299:7                                [_updateSelectionRegistrarSubscription]
package:flutter/src/rendering/selection.dart 280:5                                set registrar
package:flutter/src/widgets/selection_container.dart 119:9                        initState
package:flutter/src/widgets/framework.dart 5950:55                                [_firstBuild]
package:flutter/src/widgets/framework.dart 5793:5                                 mount
...     Normal element mounting (7 frames)
package:flutter/src/widgets/framework.dart 4587:19                                inflateWidget
package:flutter/src/widgets/framework.dart 4053:20                                updateChild
package:flutter/src/widgets/framework.dart 5841:16                                performRebuild
package:flutter/src/widgets/framework.dart 5529:7                                 rebuild
package:flutter/src/widgets/framework.dart 6149:5                                 update
package:flutter/src/widgets/inherited_notifier.dart 108:11                        update
package:flutter/src/widgets/framework.dart 4037:14                                updateChild
package:flutter/src/widgets/framework.dart 5841:16                                performRebuild
package:flutter/src/widgets/framework.dart 5982:11                                performRebuild
package:flutter/src/widgets/framework.dart 5529:7                                 rebuild
package:flutter/src/widgets/framework.dart 6007:5                                 update
package:flutter/src/widgets/framework.dart 4037:14                                updateChild
package:flutter/src/widgets/framework.dart 5841:16                                performRebuild
package:flutter/src/widgets/framework.dart 5529:7                                 rebuild
package:flutter/src/widgets/framework.dart 6149:5                                 update
package:flutter/src/widgets/framework.dart 4037:14                                updateChild
package:flutter/src/widgets/framework.dart 5841:16                                performRebuild
package:flutter/src/widgets/framework.dart 5982:11                                performRebuild
package:flutter/src/widgets/framework.dart 5529:7                                 rebuild
package:flutter/src/widgets/framework.dart 6007:5                                 update
package:flutter/src/widgets/framework.dart 4037:14                                updateChild
package:flutter/src/widgets/framework.dart 7122:14                                update
package:flutter/src/widgets/framework.dart 4037:14                                updateChild
package:flutter/src/widgets/framework.dart 5841:16                                performRebuild
package:flutter/src/widgets/framework.dart 5982:11                                performRebuild
package:flutter/src/widgets/framework.dart 5529:7                                 rebuild
package:flutter/src/widgets/framework.dart 6007:5                                 update
package:flutter/src/widgets/framework.dart 4037:14                                updateChild
package:flutter/src/widgets/framework.dart 7122:14                                update
package:flutter/src/widgets/framework.dart 4037:14                                updateChild
package:flutter/src/widgets/framework.dart 7122:14                                update
package:flutter/src/widgets/framework.dart 4037:14                                updateChild
package:flutter/src/widgets/framework.dart 5841:16                                performRebuild
package:flutter/src/widgets/framework.dart 5982:11                                performRebuild
package:flutter/src/widgets/framework.dart 5529:7                                 rebuild
package:flutter/src/widgets/framework.dart 6007:5                                 update
package:flutter/src/widgets/framework.dart 4037:14                                updateChild
package:flutter/src/widgets/framework.dart 5841:16                                performRebuild
package:flutter/src/widgets/framework.dart 5982:11                                performRebuild
package:flutter/src/widgets/framework.dart 5529:7                                 rebuild
package:flutter/src/widgets/framework.dart 6007:5                                 update
package:flutter/src/widgets/framework.dart 4037:14                                updateChild
package:flutter/src/widgets/framework.dart 5841:16                                performRebuild
package:flutter/src/widgets/framework.dart 5982:11                                performRebuild
package:flutter/src/widgets/framework.dart 5529:7                                 rebuild
package:flutter/src/widgets/framework.dart 2750:14                                [_tryRebuild]
package:flutter/src/widgets/framework.dart 2807:11                                [_flushDirtyElements]
package:flutter/src/widgets/framework.dart 3111:17                                buildScope
package:flutter/src/widgets/binding.dart 1302:9                                   drawFrame
package:flutter/src/rendering/binding.dart 495:5                                  [_handlePersistentFrameCallback]
dart-sdk/lib/_internal/js_dev_runtime/private/ddc_runtime/operations.dart 118:77  tear
package:flutter/src/scheduler/binding.dart 1430:7                                 [_invokeFrameCallback]
package:flutter/src/scheduler/binding.dart 1345:9                                 handleDrawFrame
package:flutter/src/scheduler/binding.dart 1198:5                                 [_handleDrawFrame]
dart-sdk/lib/_internal/js_dev_runtime/private/ddc_runtime/operations.dart 118:77  tear
lib/_engine/engine/platform_dispatcher.dart 1689:5                                invoke
lib/_engine/engine/platform_dispatcher.dart 265:5                                 invokeOnDrawFrame
lib/_engine/engine/frame_service.dart 209:32                                      [_renderFrame]
lib/_engine/engine/frame_service.dart 117:9                                       <fn>
dart-sdk/lib/async/zone.dart 962:54                                               runUnary
dart-sdk/lib/async/zone.dart 917:26                                               <fn>
dart-sdk/lib/_internal/js_dev_runtime/patch/js_allow_interop_patch.dart 224:27    _callDartFunctionFast1
dart-sdk/lib/_internal/js_dev_runtime/patch/js_allow_interop_patch.dart 84:15     ret

Flutter Doctor output

Doctor output
[✓] Flutter (Channel stable, 3.41.9, on macOS 26.4.1 25E253 darwin-arm64, locale en-US) [330ms]
    • Flutter version 3.41.9 on channel stable at /Users/krzysztof/lib/flutter
    • Upstream repository https://github.com/flutter/flutter.git
    • Framework revision 00b0c91f06 (2 weeks ago), 2026-04-29 10:03:19 -0700
    • Engine revision 42d3d75a56
    • Dart version 3.11.5
    • DevTools version 2.54.2
    • Feature flags: enable-web, enable-linux-desktop, enable-macos-desktop, enable-windows-desktop, enable-android, enable-ios, cli-animations, enable-native-assets, omit-legacy-version-file, enable-lldb-debugging, enable-uiscene-migration

[✓] Android toolchain - develop for Android devices (Android SDK version 36.1.0) [889ms]
    • Android SDK at /Users/krzysztof/Library/Android/sdk
    • Emulator version 36.3.10.0 (build_id 14472402) (CL:N/A)
    • Platform android-36, build-tools 36.1.0
    • ANDROID_HOME = /Users/krzysztof/Library/Android/sdk
    • Java binary at: /Applications/Android Studio.app/Contents/jbr/Contents/Home/bin/java
      This is the JDK bundled with the latest Android Studio installation on this machine.
      To manually set the JDK path, use: `flutter config --jdk-dir="path/to/jdk"`.
    • Java version OpenJDK Runtime Environment (build 21.0.8+-14196175-b1038.72)
    • All Android licenses accepted.

[!] Xcode - develop for iOS and macOS (Xcode 26.4.1) [640ms]
    • Xcode at /Applications/Xcode.app/Contents/Developer
    • Build 17E202
    ✗ Unable to get list of installed Simulator runtimes.
    • CocoaPods version 1.16.2

[✓] Chrome - develop for the web [5ms]
    • CHROME_EXECUTABLE = /Applications/Google Chrome for Testing.app/Contents/MacOS/Google Chrome for Testing

[✓] Connected device (2 available) [5.8s]
    • macOS (desktop) • macos  • darwin-arm64   • macOS 26.4.1 25E253 darwin-arm64
    • Chrome (web)    • chrome • web-javascript • Google Chrome for Testing 147.0.7727.57

[✓] Network resources [208ms]
    • All expected network resources are available.

! Doctor found issues in 1 category.

Metadata

Metadata

Assignees

No one assigned

    Labels

    P2Important issues not at the top of the work listc: crashStack traces logged to the consolef: selectionSelectableRegion, SelectionArea, SelectionContainer, Selectable, and related APIsframeworkflutter/packages/flutter repository. See also f: labels.fyi-webFor the attention of Web platform teamhas reproducible stepsThe issue has been confirmed reproducible and is ready to work onplatform-webWeb applications specificallyteam-text-inputOwned by Text Input teamtriaged-text-inputTriaged by Text Input team

    Type

    No type

    Projects

    Status

    Incoming Issues

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions