Skip to content

DropdownButton in a ListView throws error and positions menu at top of screen #12053

@collinjackson

Description

@collinjackson

Steps to Reproduce

import 'package:flutter/material.dart';

void main() {
  runApp(new MaterialApp(home: new DemoApp()));
}

class DemoApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return new Scaffold(
      appBar: new AppBar(title: new Text('DropdownButton Example')),
      body: new ListView(
        children: [
          new DropdownButton<String>(
            items: <String>['Foo', 'Bar'].map((String value) {
              return new DropdownMenuItem<String>(
                value: value,
                child: new Text(value),
              );
            }).toList(),
            onChanged: (_) {},
          ),
        ],
      ),
    );
  }
}

Tap the DropdownButton. An error is logged and the dropdown is positioned in the wrong place, at the top of the screen.

screen shot 2017-09-12 at 11 12 13 am

The problem is on this line in dropdown.dart, we should avoid clamping with max < min because clamp will complain.

Credit to Mahi for reporting this issue on StackOverflow.

Logs

══╡ EXCEPTION CAUGHT BY RENDERING LIBRARY ╞═════════════════════════════════════════════════════════
The following ArgumentError was thrown during performLayout():
Invalid argument(s): 0.0
When the exception was thrown, this was the stack:
#0      double.clamp (dart:core-patch/double.dart:145)
#1      _DropdownMenuRouteLayout.getPositionForChild (package:flutter/src/material/dropdown.dart:231:39)
#2      RenderCustomSingleChildLayoutBox.performLayout (package:flutter/src/rendering/shifted_box.dart:936:41)
#3      RenderObject.layout (package:flutter/src/rendering/object.dart:1916:7)
#4      RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:106:13)
#5      RenderObject.layout (package:flutter/src/rendering/object.dart:1916:7)
#6      RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:106:13)
#7      RenderObject.layout (package:flutter/src/rendering/object.dart:1916:7)
#8      RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:106:13)
#9      RenderOffstage.performLayout (package:flutter/src/rendering/proxy_box.dart:2724:26)
#10     RenderObject.layout (package:flutter/src/rendering/object.dart:1916:7)
#11     RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:106:13)
#12     RenderObject.layout (package:flutter/src/rendering/object.dart:1916:7)
#13     RenderStack.performLayout (package:flutter/src/rendering/stack.dart:433:15)
#14     RenderObject._layoutWithoutResize (package:flutter/src/rendering/object.dart:1791:7)
#15     PipelineOwner.flushLayout (package:flutter/src/rendering/object.dart:1080:18)
#16     BindingBase&SchedulerBinding&GestureBinding&ServicesBinding&RendererBinding.drawFrame (package:flutter/src/rendering/binding.dart:256:19)
#17     BindingBase&SchedulerBinding&GestureBinding&ServicesBinding&RendererBinding&WidgetsBinding.drawFrame (package:flutter/src/widgets/binding.dart:531:22)
#18     BindingBase&SchedulerBinding&GestureBinding&ServicesBinding&RendererBinding._handlePersistentFrameCallback (package:flutter/src/rendering/binding.dart:194:5)
#19     BindingBase&SchedulerBinding._invokeFrameCallback (package:flutter/src/scheduler/binding.dart:713:15)
#20     BindingBase&SchedulerBinding.handleDrawFrame (package:flutter/src/scheduler/binding.dart:649:9)
#21     _invoke (file:///b/build/slave/Mac_Engine/build/src/flutter/lib/ui/hooks.dart:86)
#22     _drawFrame (file:///b/build/slave/Mac_Engine/build/src/flutter/lib/ui/hooks.dart:75)
The following RenderObject was being processed when the exception was fired:
  RenderCustomSingleChildLayoutBox#3cba8 NEEDS-LAYOUT NEEDS-PAINT
  creator: CustomSingleChildLayout ← _ModalScopeStatus ← PageStorage-[GlobalKey#6eb4e] ←
  RepaintBoundary ← IgnorePointer ← Offstage ← _FocusScopeMarker ← Semantics ← FocusScope ←
  _ModalScope-[LabeledGlobalKey<_ModalScopeState>#10f13] ←
  _OverlayEntry-[LabeledGlobalKey<_OverlayEntryState>#40d34] ← Stack ← ⋯
  parentData: <none> (can use size)
  constraints: BoxConstraints(w=320.0, h=568.0)
  size: Size(320.0, 568.0)
This RenderObject had the following descendants (showing up to depth 5):
  RenderOpacity#f9dbb relayoutBoundary=up1 NEEDS-PAINT
    RenderCustomPaint#5644c relayoutBoundary=up2 NEEDS-PAINT
      RenderClipRect#59b4a relayoutBoundary=up3 NEEDS-PAINT
        _RenderInkFeatures#0f858 relayoutBoundary=up4 NEEDS-PAINT
          RenderRepaintBoundary#a8fc7 relayoutBoundary=up5 NEEDS-PAINT
════════════════════════════════════════════════════════════════════════════════════════════════════

Flutter Doctor

[✓] Flutter (on Mac OS X 10.12.6 16G29, locale en-US, channel unknown)
• Flutter at /Users/jackson/git/flutter
• Framework revision c925b4c (11 days ago), 2017-09-01 06:14:35 -0700
• Engine revision 29e0c1c
• Tools Dart version 1.25.0-dev.11.0

[✓] Android toolchain - develop for Android devices (Android SDK 26.0.1)
• Android SDK at /Users/jackson/Library/Android/sdk/
• Platform android-26, build-tools 26.0.1
• ANDROID_HOME = /Users/jackson/Library/Android/sdk/
• Java binary at: /Applications/Android Studio.app/Contents/jre/jdk/Contents/Home/bin/java
• Java version OpenJDK Runtime Environment (build 1.8.0_112-release-b06)

[✓] iOS toolchain - develop for iOS devices (Xcode 8.3.3)
• Xcode at /Applications/Xcode.app/Contents/Developer
• Xcode 8.3.3, Build version 8E3004b
• ios-deploy 1.9.1
• CocoaPods version 1.3.1

[✓] Android Studio (version 2.3)
• Android Studio at /Applications/Android Studio.app/Contents
• Java version OpenJDK Runtime Environment (build 1.8.0_112-release-b06)

[✓] IntelliJ IDEA Community Edition (version 2017.2.2)
• Flutter plugin version 16.0
• Dart plugin version 172.3757.55

[✓] Connected devices
• iPhone SE • 7072C907-DBAD-44FE-8F40-0257442C51D9 • ios • iOS 10.3 (simulator)

Metadata

Metadata

Assignees

Labels

f: material designflutter/packages/flutter/material repository.frameworkflutter/packages/flutter repository. See also f: labels.

Type

No type

Projects

No projects

Relationships

None yet

Development

No branches or pull requests

Issue actions