Skip to content

DropdownMenu crash if resize the window during the menu opening #124854

@xu-baolin

Description

@xu-baolin

Is there an existing issue for this?

Steps to reproduce

1, run the code on desktop
2,show the menu
3, resize the window

Expected results

no crash

Actual results

crash

Code sample

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

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

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

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: const MyHomePage(title: 'Flutter Demo Home Page'),
    );
  }
}

class MyHomePage extends StatelessWidget {
  const MyHomePage({super.key, required this.title});

  final String title;

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text(title)),
      body: Center(
        child: DropdownMenu(
          width: MediaQuery.of(context).size.width,
          dropdownMenuEntries: const [
            DropdownMenuEntry(value: 1, label: "One"),
            DropdownMenuEntry(value: 2, label: "Two"),
            DropdownMenuEntry(value: 3, label: "Three"),
          ],
        ),
      ),
    );
  }
}

Screenshots or Video

Screenshots / Video demonstration

[Upload media here]

Logs

Logs
Resolving dependencies...
Got dependencies!
Launching lib\main.dart on Windows in debug mode...
Building Windows application...
√  Built build\windows\runner\Debug\demo_flutter.exe.
Debug service listening on ws://127.0.0.1:56081/ueZeQtMyRSQ=/ws
Syncing files to device Windows...

======== Exception caught by widgets library =======================================================
The following assertion was thrown building _ActionsScope:
setState() or markNeedsBuild() called during build.

This DropdownMenu<int> widget cannot be marked as needing to build because the framework is already in the process of building widgets. A widget can be marked as needing to be built during the build phase only if one of its ancestors is currently building. This exception is allowed because the framework builds parent widgets before children, which means a dirty descendant will always be built. Otherwise, the framework might not visit this widget during this build phase.
The widget on which setState() or markNeedsBuild() was called was: DropdownMenu<int>
  dependencies: [Directionality, _InheritedTheme, _LocalizationsScope-[GlobalKey#ae3c9]]
  state: _DropdownMenuState<int>#6d449
The widget which was currently being built when the offending call was made was: MenuAnchor
  focusNode: null
  style: MenuStyle#7c4e6(minimumSize: MaterialStatePropertyAll(Size(1263.0, 0.0)), maximumSize: MaterialStatePropertyAll(Size(Infinity, Infinity)), visualDensity: VisualDensity#d630e(h: 0.0, v: 0.0))
  clipBehavior: hardEdge
  alignmentOffset: Offset(0.0, 0.0)
  child: "null"
  dirty
  dependencies: [Directionality, MediaQuery]
  state: _MenuAnchorState#cc1bc
The relevant error-causing widget was: 
  DropdownMenu<int> DropdownMenu:file:///D:/Users/80256643/StudioProjects/demo_flutter/lib/main.dart:32:16
When the exception was thrown, this was the stack: 
#0      Element.markNeedsBuild.<anonymous closure> (package:flutter/src/widgets/framework.dart:4651:9)
#1      Element.markNeedsBuild (package:flutter/src/widgets/framework.dart:4663:6)
#2      State.setState (package:flutter/src/widgets/framework.dart:1159:15)
#3      _DropdownMenuState.build.<anonymous closure> (package:flutter/src/material/dropdown_menu.dart:545:25)
#4      _MenuAnchorState._close (package:flutter/src/material/menu_anchor.dart:560:21)
#5      _MenuAnchorState.didChangeDependencies (package:flutter/src/material/menu_anchor.dart:321:13)
#6      StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:5248:13)
#7      Element.rebuild (package:flutter/src/widgets/framework.dart:4805:7)
#8      StatefulElement.update (package:flutter/src/widgets/framework.dart:5274:5)
#9      Element.updateChild (package:flutter/src/widgets/framework.dart:3686:15)
#10     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5111:16)
#11     Element.rebuild (package:flutter/src/widgets/framework.dart:4805:7)
#12     ProxyElement.update (package:flutter/src/widgets/framework.dart:5417:5)
#13     Element.updateChild (package:flutter/src/widgets/framework.dart:3686:15)
#14     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5111:16)
#15     StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:5251:11)
#16     Element.rebuild (package:flutter/src/widgets/framework.dart:4805:7)
#17     StatefulElement.update (package:flutter/src/widgets/framework.dart:5274:5)
#18     Element.updateChild (package:flutter/src/widgets/framework.dart:3686:15)
#19     SingleChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:6442:14)
#20     Element.updateChild (package:flutter/src/widgets/framework.dart:3686:15)
#21     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5111:16)
#22     Element.rebuild (package:flutter/src/widgets/framework.dart:4805:7)
#23     ProxyElement.update (package:flutter/src/widgets/framework.dart:5417:5)
#24     _InheritedNotifierElement.update (package:flutter/src/widgets/inherited_notifier.dart:107:11)
#25     Element.updateChild (package:flutter/src/widgets/framework.dart:3686:15)
#26     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5111:16)
#27     StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:5251:11)
#28     Element.rebuild (package:flutter/src/widgets/framework.dart:4805:7)
#29     StatefulElement.update (package:flutter/src/widgets/framework.dart:5274:5)
#30     Element.updateChild (package:flutter/src/widgets/framework.dart:3686:15)
#31     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5111:16)
#32     StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:5251:11)
#33     Element.rebuild (package:flutter/src/widgets/framework.dart:4805:7)
#34     StatefulElement.update (package:flutter/src/widgets/framework.dart:5274:5)
#35     Element.updateChild (package:flutter/src/widgets/framework.dart:3686:15)
#36     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5111:16)
#37     StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:5251:11)
#38     Element.rebuild (package:flutter/src/widgets/framework.dart:4805:7)
#39     StatefulElement.update (package:flutter/src/widgets/framework.dart:5274:5)
#40     Element.updateChild (package:flutter/src/widgets/framework.dart:3686:15)
#41     SingleChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:6442:14)
#42     Element.updateChild (package:flutter/src/widgets/framework.dart:3686:15)
#43     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5111:16)
#44     Element.rebuild (package:flutter/src/widgets/framework.dart:4805:7)
#45     StatelessElement.update (package:flutter/src/widgets/framework.dart:5162:5)
#46     Element.updateChild (package:flutter/src/widgets/framework.dart:3686:15)
#47     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5111:16)
#48     Element.rebuild (package:flutter/src/widgets/framework.dart:4805:7)
#49     StatelessElement.update (package:flutter/src/widgets/framework.dart:5162:5)
#50     Element.updateChild (package:flutter/src/widgets/framework.dart:3686:15)
#51     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5111:16)
#52     Element.rebuild (package:flutter/src/widgets/framework.dart:4805:7)
#53     ProxyElement.update (package:flutter/src/widgets/framework.dart:5417:5)
#54     Element.updateChild (package:flutter/src/widgets/framework.dart:3686:15)
#55     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5111:16)
#56     Element.rebuild (package:flutter/src/widgets/framework.dart:4805:7)
#57     ProxyElement.update (package:flutter/src/widgets/framework.dart:5417:5)
#58     Element.updateChild (package:flutter/src/widgets/framework.dart:3686:15)
#59     RenderObjectElement.updateChildren (package:flutter/src/widgets/framework.dart:6093:32)
#60     MultiChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:6595:17)
#61     Element.updateChild (package:flutter/src/widgets/framework.dart:3686:15)
#62     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5111:16)
#63     Element.rebuild (package:flutter/src/widgets/framework.dart:4805:7)
#64     ProxyElement.update (package:flutter/src/widgets/framework.dart:5417:5)
#65     Element.updateChild (package:flutter/src/widgets/framework.dart:3686:15)
#66     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5111:16)
#67     StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:5251:11)
#68     Element.rebuild (package:flutter/src/widgets/framework.dart:4805:7)
#69     StatefulElement.update (package:flutter/src/widgets/framework.dart:5274:5)
#70     Element.updateChild (package:flutter/src/widgets/framework.dart:3686:15)
#71     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5111:16)
#72     StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:5251:11)
#73     Element.rebuild (package:flutter/src/widgets/framework.dart:4805:7)
#74     StatefulElement.update (package:flutter/src/widgets/framework.dart:5274:5)
#75     Element.updateChild (package:flutter/src/widgets/framework.dart:3686:15)
#76     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5111:16)
#77     Element.rebuild (package:flutter/src/widgets/framework.dart:4805:7)
#78     ProxyElement.update (package:flutter/src/widgets/framework.dart:5417:5)
#79     Element.updateChild (package:flutter/src/widgets/framework.dart:3686:15)
#80     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5111:16)
#81     StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:5251:11)
#82     Element.rebuild (package:flutter/src/widgets/framework.dart:4805:7)
#83     StatefulElement.update (package:flutter/src/widgets/framework.dart:5274:5)
#84     Element.updateChild (package:flutter/src/widgets/framework.dart:3686:15)
#85     SingleChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:6442:14)
#86     Element.updateChild (package:flutter/src/widgets/framework.dart:3686:15)
#87     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5111:16)
#88     Element.rebuild (package:flutter/src/widgets/framework.dart:4805:7)
#89     ProxyElement.update (package:flutter/src/widgets/framework.dart:5417:5)
#90     Element.updateChild (package:flutter/src/widgets/framework.dart:3686:15)
#91     SingleChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:6442:14)
#92     Element.updateChild (package:flutter/src/widgets/framework.dart:3686:15)
#93     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5111:16)
#94     StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:5251:11)
#95     Element.rebuild (package:flutter/src/widgets/framework.dart:4805:7)
#96     StatefulElement.update (package:flutter/src/widgets/framework.dart:5274:5)
#97     Element.updateChild (package:flutter/src/widgets/framework.dart:3686:15)
#98     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5111:16)
#99     StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:5251:11)
#100    Element.rebuild (package:flutter/src/widgets/framework.dart:4805:7)
#101    StatefulElement.update (package:flutter/src/widgets/framework.dart:5274:5)
#102    Element.updateChild (package:flutter/src/widgets/framework.dart:3686:15)
#103    ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5111:16)
#104    Element.rebuild (package:flutter/src/widgets/framework.dart:4805:7)
#105    ProxyElement.update (package:flutter/src/widgets/framework.dart:5417:5)
#106    Element.updateChild (package:flutter/src/widgets/framework.dart:3686:15)
#107    ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5111:16)
#108    Element.rebuild (package:flutter/src/widgets/framework.dart:4805:7)
#109    ProxyElement.update (package:flutter/src/widgets/framework.dart:5417:5)
#110    Element.updateChild (package:flutter/src/widgets/framework.dart:3686:15)
#111    ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5111:16)
#112    Element.rebuild (package:flutter/src/widgets/framework.dart:4805:7)
#113    ProxyElement.update (package:flutter/src/widgets/framework.dart:5417:5)
#114    Element.updateChild (package:flutter/src/widgets/framework.dart:3686:15)
#115    ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5111:16)
#116    StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:5251:11)
#117    Element.rebuild (package:flutter/src/widgets/framework.dart:4805:7)
#118    StatefulElement.update (package:flutter/src/widgets/framework.dart:5274:5)
#119    Element.updateChild (package:flutter/src/widgets/framework.dart:3686:15)
#120    ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5111:16)
#121    Element.rebuild (package:flutter/src/widgets/framework.dart:4805:7)
#122    ProxyElement.update (package:flutter/src/widgets/framework.dart:5417:5)
#123    Element.updateChild (package:flutter/src/widgets/framework.dart:3686:15)
#124    ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5111:16)
#125    StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:5251:11)
#126    Element.rebuild (package:flutter/src/widgets/framework.dart:4805:7)
#127    StatefulElement.update (package:flutter/src/widgets/framework.dart:5274:5)
#128    Element.updateChild (package:flutter/src/widgets/framework.dart:3686:15)
#129    ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5111:16)
#130    Element.rebuild (package:flutter/src/widgets/framework.dart:4805:7)
#131    BuildOwner.buildScope (package:flutter/src/widgets/framework.dart:2780:19)
#132    WidgetsBinding.drawFrame (package:flutter/src/widgets/binding.dart:903:21)
#133    RendererBinding._handlePersistentFrameCallback (package:flutter/src/rendering/binding.dart:358:5)
#134    SchedulerBinding._invokeFrameCallback (package:flutter/src/scheduler/binding.dart:1289:15)
#135    SchedulerBinding.handleDrawFrame (package:flutter/src/scheduler/binding.dart:1219:9)
#136    SchedulerBinding._handleDrawFrame (package:flutter/src/scheduler/binding.dart:1077:5)
#137    _invoke (dart:ui/hooks.dart:142:13)
#138    PlatformDispatcher._drawFrame (dart:ui/platform_dispatcher.dart:359:5)
#139    _drawFrame (dart:ui/hooks.dart:112:31)
====================================================================================================

======== Exception caught by scheduler library =====================================================
The following _TypeError was thrown during a scheduler callback:
Null check operator used on a null value

When the exception was thrown, this was the stack: 
#0      _MenuAnchorState.didUpdateWidget.<anonymous closure> (package:flutter/src/material/menu_anchor.dart:345:22)
#1      SchedulerBinding._invokeFrameCallback (package:flutter/src/scheduler/binding.dart:1289:15)
#2      SchedulerBinding.handleDrawFrame (package:flutter/src/scheduler/binding.dart:1228:9)
#3      SchedulerBinding._handleDrawFrame (package:flutter/src/scheduler/binding.dart:1077:5)
#4      _invoke (dart:ui/hooks.dart:142:13)
#5      PlatformDispatcher._drawFrame (dart:ui/platform_dispatcher.dart:359:5)
#6      _drawFrame (dart:ui/hooks.dart:112:31)
====================================================================================================

Flutter Doctor output

Doctor output
crash

Metadata

Metadata

Assignees

No one assigned

    Labels

    a: desktopRunning on desktopc: crashStack traces logged to the consolef: material designflutter/packages/flutter/material repository.found in release: 3.10Found to occur in 3.10found in release: 3.7Found to occur in 3.7frameworkflutter/packages/flutter repository. See also f: labels.has reproducible stepsThe issue has been confirmed reproducible and is ready to work onr: fixedIssue is closed as already fixed in a newer version

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions