Skip to content

DropdownMenu throws an assert error if keyboard is closed while menu is open #135865

@howljs

Description

@howljs

Is there an existing issue for this?

Steps to reproduce

  1. Run the code on simulator
  2. Select the textfield
  3. Select the dropdown menu
  4. Press done to close the keyboard

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(
        colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
        useMaterial3: true,
      ),
      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(
        backgroundColor: Theme.of(context).colorScheme.inversePrimary,
        title: Text(title),
      ),
      body: const SingleChildScrollView(
        child: Column(
          children: [
            Padding(
              padding: EdgeInsets.symmetric(vertical: 20, horizontal: 16),
              child: Column(
                children: [
                  SizedBox(height: 500),
                  TextField(
                    decoration: InputDecoration(label: Text('Textfield')),
                  ),
                  SizedBox(height: 24),
                  DropdownMenu<int>(
                    label: Text('Dropdown'),
                    dropdownMenuEntries: [
                      DropdownMenuEntry(value: 1, label: 'Dropdown Item 1'),
                      DropdownMenuEntry(value: 2, label: 'Dropdown Item 2'),
                      DropdownMenuEntry(value: 3, label: 'Dropdown Item 3'),
                      DropdownMenuEntry(value: 4, label: 'Dropdown Item 4')
                    ],
                  ),
                ],
              ),
            ),
          ],
        ),
      ),
    );
  }
}

Screenshots or Video

Screenshots / Video demonstration
bug.mp4

Logs

Logs
[+10554 ms] ══╡ EXCEPTION CAUGHT BY FOUNDATION LIBRARY ╞════════════════════════════════════════════════════════
                     The following assertion was thrown while dispatching notifications for ValueNotifier<bool>:
                     Build scheduled during frame.
                     While the widget tree was being built, laid out, and painted, a new frame was scheduled to rebuild
                     the widget tree.
                     This might be because setState() was called from a layout or paint callback. If a change is needed
                     to the widget tree, it should be applied as the tree is being built. Scheduling a change for the
                     subsequent frame instead results in an interface that lags behind by one frame. If this was done to
                     make your build dependent on a size measured at layout time, consider using a LayoutBuilder,
                     CustomSingleChildLayout, or CustomMultiChildLayout. If, on the other hand, the one frame delay is
                     the desired effect, for example because this is an animation, consider scheduling the frame in a
                     post-frame callback using SchedulerBinding.addPostFrameCallback or using an AnimationController to
                     trigger the animation.
                     
                     When the exception was thrown, this was the stack:
                     #0      WidgetsBinding._handleBuildScheduled.<anonymous closure> (package:flutter/src/widgets/binding.dart:849:9)
                     #1      WidgetsBinding._handleBuildScheduled (package:flutter/src/widgets/binding.dart:872:6)
                     #2      BuildOwner.scheduleBuildFor (package:flutter/src/widgets/framework.dart:2721:24)
                     #3      Element.markNeedsBuild (package:flutter/src/widgets/framework.dart:5050:12)
                     #4      State.setState (package:flutter/src/widgets/framework.dart:1223:15)
                     #5      _MenuAnchorState._close (package:flutter/src/material/menu_anchor.dart:563:7)
                     #6      _MenuAnchorState._handleScroll (package:flutter/src/material/menu_anchor.dart:472:13)
                     #7      ChangeNotifier.notifyListeners (package:flutter/src/foundation/change_notifier.dart:433:24)
                     #8      ValueNotifier.value= (package:flutter/src/foundation/change_notifier.dart:555:5)
                     #9      ScrollPosition.beginActivity (package:flutter/src/widgets/scroll_position.dart:1003:25)
                     #10     ScrollPositionWithSingleContext.beginActivity
(package:flutter/src/widgets/scroll_position_with_single_context.dart:113:11)
                     #11     ScrollPositionWithSingleContext.goBallistic
(package:flutter/src/widgets/scroll_position_with_single_context.dart:146:7)
                     #12     IdleScrollActivity.applyNewDimensions (package:flutter/src/widgets/scroll_activity.dart:159:14)
                     #13     ScrollPosition.applyNewDimensions (package:flutter/src/widgets/scroll_position.dart:706:15)
                     #14     ScrollPositionWithSingleContext.applyNewDimensions
(package:flutter/src/widgets/scroll_position_with_single_context.dart:102:11)
                     #15     ScrollPosition.applyContentDimensions (package:flutter/src/widgets/scroll_position.dart:635:7)
                     #16     _RenderSingleChildViewport.performLayout (package:flutter/src/widgets/single_child_scroll_view.dart:499:12)
                     #17     RenderObject.layout (package:flutter/src/rendering/object.dart:2546:7)
                     #18     RenderBox.layout (package:flutter/src/rendering/box.dart:2389:11)
                     #19     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:104:21)
                     #20     RenderObject.layout (package:flutter/src/rendering/object.dart:2546:7)
                     #21     RenderBox.layout (package:flutter/src/rendering/box.dart:2389:11)
                     #22     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:104:21)
                     #23     RenderObject.layout (package:flutter/src/rendering/object.dart:2546:7)
                     #24     RenderBox.layout (package:flutter/src/rendering/box.dart:2389:11)
                     #25     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:104:21)
                     #26     RenderObject.layout (package:flutter/src/rendering/object.dart:2546:7)
                     #27     RenderBox.layout (package:flutter/src/rendering/box.dart:2389:11)
                     #28     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:104:21)
                     #29     RenderObject.layout (package:flutter/src/rendering/object.dart:2546:7)
                     #30     RenderBox.layout (package:flutter/src/rendering/box.dart:2389:11)
                     #31     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:104:21)
                     #32     RenderObject.layout (package:flutter/src/rendering/object.dart:2546:7)
                     #33     RenderBox.layout (package:flutter/src/rendering/box.dart:2389:11)
                     #34     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:104:21)
                     #35     RenderObject.layout (package:flutter/src/rendering/object.dart:2546:7)
                     #36     RenderBox.layout (package:flutter/src/rendering/box.dart:2389:11)
                     #37     MultiChildLayoutDelegate.layoutChild (package:flutter/src/rendering/custom_layout.dart:173:12)
                     #38     _ScaffoldLayout.performLayout (package:flutter/src/material/scaffold.dart:1062:7)
                     #39     MultiChildLayoutDelegate._callPerformLayout (package:flutter/src/rendering/custom_layout.dart:237:7)
                     #40     RenderCustomMultiChildLayoutBox.performLayout (package:flutter/src/rendering/custom_layout.dart:403:14)
                     #41     RenderObject._layoutWithoutResize (package:flutter/src/rendering/object.dart:2385:7)
                     #42     PipelineOwner.flushLayout (package:flutter/src/rendering/object.dart:1025:18)
                     #43     PipelineOwner.flushLayout (package:flutter/src/rendering/object.dart:1038:15)
                     #44     RendererBinding.drawFrame (package:flutter/src/rendering/binding.dart:591:23)
                     #45     WidgetsBinding.drawFrame (package:flutter/src/widgets/binding.dart:986:13)
                     #46     RendererBinding._handlePersistentFrameCallback (package:flutter/src/rendering/binding.dart:457:5)
                     #47     SchedulerBinding._invokeFrameCallback (package:flutter/src/scheduler/binding.dart:1325:15)
                     #48     SchedulerBinding.handleDrawFrame (package:flutter/src/scheduler/binding.dart:1255:9)
                     #49     SchedulerBinding._handleDrawFrame (package:flutter/src/scheduler/binding.dart:1113:5)
                     #50     _invoke (dart:ui/hooks.dart:312:13)
                     #51     PlatformDispatcher._drawFrame (dart:ui/platform_dispatcher.dart:383:5)
                     #52     _drawFrame (dart:ui/hooks.dart:283:31)
                     
                     The ValueNotifier<bool> sending notification was:
                       ValueNotifier<bool>#01070(true)
                     ════════════════════════════════════════════════════════════════════════════════════════════════════

Flutter Doctor output

Doctor output
[✓] Flutter (Channel master, 3.16.0-2.0.pre.6, on macOS 13.5.2 22G91 darwin-arm64, locale en-VN)
    • Flutter version 3.16.0-2.0.pre.6 on channel master at /Users/howl/development/flutter
    • Upstream repository https://github.com/flutter/flutter.git
    • Framework revision bfd4cf6a2b (77 minutes ago), 2023-10-02 12:12:14 -0400
    • Engine revision c0cf135b11
    • Dart version 3.2.0 (build 3.2.0-221.0.dev)
    • DevTools version 2.28.1

[✓] Android toolchain - develop for Android devices (Android SDK version 34.0.0)
    • Android SDK at /Users/howl/Library/Android/sdk
    • Platform android-34, build-tools 34.0.0
    • ANDROID_HOME = /Users/howl/Library/Android/sdk
    • Java binary at: /Applications/Android Studio.app/Contents/jbr/Contents/Home/bin/java
    • Java version OpenJDK Runtime Environment (build 17.0.6+0-17.0.6b802.4-9586694)
    • All Android licenses accepted.

[✓] Xcode - develop for iOS and macOS (Xcode 15.0)
    • Xcode at /Applications/Xcode.app/Contents/Developer
    • Build 15A240d
    • CocoaPods version 1.13.0

[✓] Chrome - develop for the web
    • Chrome at /Applications/Google Chrome.app/Contents/MacOS/Google Chrome

[✓] Android Studio (version 2022.2)
    • Android Studio at /Applications/Android Studio.app/Contents
    • Flutter plugin can be installed from:
      🔨 https://plugins.jetbrains.com/plugin/9212-flutter
    • Dart plugin can be installed from:
      🔨 https://plugins.jetbrains.com/plugin/6351-dart
    • Java version OpenJDK Runtime Environment (build 17.0.6+0-17.0.6b802.4-9586694)

[✓] VS Code (version 1.82.2)
    • VS Code at /Applications/Visual Studio Code.app/Contents
    • Flutter extension version 3.74.0

[✓] Connected device (3 available)
    • iPorn 14 (mobile)          • 00008120-001A593811E0C01E            • ios            • iOS 17.0 21A329
    • iPhone 15 Pro Max (mobile) • E1D76201-773A-4AF6-9CBC-19AF1A033835 • ios            • com.apple.CoreSimulator.SimRuntime.iOS-17-0
      (simulator)
    • Chrome (web)               • chrome                               • web-javascript • Google Chrome 117.0.5938.132

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

• No issues found!

Metadata

Metadata

Assignees

Labels

a: error messageError messages from the Flutter frameworka: text inputEntering text in a text field or keyboard related problemsf: material designflutter/packages/flutter/material repository.found in release: 3.13Found to occur in 3.13found in release: 3.16Found to occur in 3.16frameworkflutter/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 versionteam-designOwned by Design Languages team

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions