我有一个非常简单的控件,我试图在其中显示带有几个 TextFields
的 DropdownButton
。
当应用程序在模拟器中运行时,我收到一条错误消息
BOTTOM OVERFLOWED BY Infinity PIXELS
Stack Trace
提示了这个问题并指向了一些相关文档,但作为 Flutter 的新手,我不确定需要更改哪些内容。
我已经尝试了很多基于关于类似错误的问题的建议,但没有任何运气。
堆栈跟踪:
I/flutter (10708): ══╡ EXCEPTION CAUGHT BY RENDERING LIBRARY ╞═════════════════════════════════════════════════════════
I/flutter (10708): The following assertion was thrown during performLayout():
I/flutter (10708): RenderIndexedStack object was given an infinite size during layout.
I/flutter (10708): This probably means that it is a render object that tries to be as big as possible, but it was put
I/flutter (10708): inside another render object that allows its children to pick their own size.
I/flutter (10708): The nearest ancestor providing an unbounded width constraint is:
I/flutter (10708): RenderFlex#1d3ef relayoutBoundary=up7 NEEDS-LAYOUT NEEDS-PAINT
I/flutter (10708): creator: Row ← Padding ← Container ← DefaultTextStyle ← Stack ← Listener ← _GestureSemantics ←
I/flutter (10708): RawGestureDetector ← GestureDetector ← Semantics ← DropdownButton<String> ← Column ← ⋯
I/flutter (10708): parentData: offset=Offset(0.0, 0.0) (can use size)
I/flutter (10708): constraints: BoxConstraints(0.0<=w<=391.4, 0.0<=h<=Infinity)
I/flutter (10708): size: MISSING
I/flutter (10708): direction: horizontal
I/flutter (10708): mainAxisAlignment: spaceBetween
I/flutter (10708): mainAxisSize: min
I/flutter (10708): crossAxisAlignment: center
I/flutter (10708): textDirection: ltr
I/flutter (10708): verticalDirection: down
I/flutter (10708): The nearest ancestor providing an unbounded height constraint is:
I/flutter (10708): RenderFlex#bb3f8 relayoutBoundary=up1 NEEDS-LAYOUT NEEDS-PAINT
I/flutter (10708): creator: Column ← MediaQuery ← LayoutId-[<_ScaffoldSlot.body>] ← CustomMultiChildLayout ←
I/flutter (10708): AnimatedBuilder ← DefaultTextStyle ← AnimatedDefaultTextStyle ← _InkFeatures-[GlobalKey#6a13f ink
I/flutter (10708): renderer] ← NotificationListener<LayoutChangedNotification> ← PhysicalModel ←
I/flutter (10708): AnimatedPhysicalModel ← Material ← ⋯
I/flutter (10708): parentData: offset=Offset(0.0, 0.0); id=_ScaffoldSlot.body (can use size)
I/flutter (10708): constraints: BoxConstraints(0.0<=w<=391.4, 0.0<=h<=659.9)
I/flutter (10708): size: MISSING
I/flutter (10708): direction: vertical
I/flutter (10708): mainAxisAlignment: start
I/flutter (10708): mainAxisSize: max
I/flutter (10708): crossAxisAlignment: center
I/flutter (10708): verticalDirection: down
I/flutter (10708): The constraints that applied to the RenderIndexedStack were:
I/flutter (10708): BoxConstraints(unconstrained)
I/flutter (10708): The exact size it was given was:
I/flutter (10708): Size(Infinity, Infinity)
I/flutter (10708): See https://flutter.io/layout/ for more information.
此处的代码已为简洁起见删除了 TextFields
,因为有或没有它们都会发生错误。
代码
import 'package:flutter/material.dart';
import 'package:todo_app/model/todo.dart';
import 'package:todo_app/util/dbhelper.dart';
import 'package:intl/intl.dart';
class TodoDetail extends StatefulWidget {
Todo todo;
TodoDetail(Todo todo) {
this.todo = todo;
debugPrint("called ctor with " + todo.title + "!!");
}
@override
State<StatefulWidget> createState() => TodoDetailState(todo);
}
class TodoDetailState extends State {
final Todo todo;
TodoDetailState(this.todo);
final _priorites = ["High, Medium", "Low"];
String _priority = "Low";
TextEditingController titleController = TextEditingController();
TextEditingController descriptionController = TextEditingController();
@override
Widget build(BuildContext context) {
titleController.text = todo.title;
descriptionController.text = todo.description;
TextStyle textStyle = Theme.of(context).textTheme.title;
return Padding(
padding: EdgeInsets.only(top: 35, right: 10, left: 10),
child: Scaffold(
appBar: AppBar(
automaticallyImplyLeading: false,
title: Text('Add New'), //todo.title
),
body: Column(children: <Widget>[
DropdownButton<String>(
isExpanded: true,
items: _priorites.map((String value) {
return DropdownMenuItem<String>(
value: value, child: Text(value));
}).toList(),
style: textStyle,
value: "Low",
onChanged: null)
])));
//);
}
}
最佳答案
尝试在 DropdownButton 周围用固定宽度包裹 Container。
@override
Widget build(BuildContext context) {
titleController.text = todo.title;
descriptionController.text = todo.description;
TextStyle textStyle = Theme.of(context).textTheme.title;
return Padding(
padding: EdgeInsets.only(top: 35, right: 10, left: 10),
child: Scaffold(
appBar: AppBar(
automaticallyImplyLeading: false,
title: Text('Add New'), //todo.title
),
body: Container(
height: 200,
child: Column(
children: <Widget>[
Container(
// don't forget about height
height: 200,
child: DropdownButton<String>(
isExpanded: true,
items: _priorites.map((String value) {
return DropdownMenuItem<String>(
value: value, child: Text(value));
}).toList(),
style: textStyle,
value: "Low",
onChanged: null,
),
)
],
),
),
),
);
}
关于dart - 底部被 Infinity 像素溢出的 RenderFlex,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54621388/