我正在尝试使用Flutter进行实验,目前我正在尝试在对话框中的列表视图中显示输入字段和下拉菜单。然而,我发现下拉菜单超出了视图的水平宽度,并导致黄灰色条纹图案(如下所示)
代码如下:
class DataInput extends StatefulWidget {
@override
State createState() => new DataInputState("");
}
enum DismissDialogAction {
cancel,
discard,
save,
}
class DataInputState extends State<DataInput> {
final String _data;
static const types = const <Map<String, String>>[
const {
"id": "103",
"desc": "0001 - lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum"
},
const {
"id": "804",
"desc": "0002 - lorem ipsum lorem ipsum"
},
];
DataInputState(this._data);
@override
Widget build(BuildContext context) {
final ThemeData theme = Theme.of(context);
return new Scaffold(
appBar: new AppBar(
title: const Text("Details"),
actions: <Widget>[
new FlatButton(
onPressed: () => Navigator.pop(context, DismissDialogAction.save),
child: new Row(
children: <Widget>[
new Icon(Icons.save, color: Colors.white,),
new Text(
"Save",
style: theme.textTheme.body1.copyWith(
color: Colors.white,)
)
],
)
),
],
),
body: new ListView(
shrinkWrap: true,
children: <Widget>[
new Text("Set Label"),
new TextField(
autocorrect: false,
),
new Text("Select Type"),
new Container(
width: new FractionColumnWidth(0.5).value,
child: new DropdownButton(
items: types.map((m) =>
new DropdownMenuItem(
key: new Key(m["id"]),
child: new Text(m["desc"]))
).toList(growable: false),
onChanged: null
),
),
],
),
);
}
}
错误:
══╡ EXCEPTION CAUGHT BY RENDERING LIBRARY ╞═════════════════════════════════════════════════════════
The following message was thrown during layout:
A horizontal RenderFlex overflowed by 433 pixels.
The edge of the RenderFlex that is overflowing has been marked in the rendering with a yellow and
black striped pattern. This is usually caused by the contents being too big for the RenderFlex.
RenderFlex to fit within the available space instead of being sized to their natural size.
This is considered an error condition because it indicates that there is content that cannot be
seen. If the content is legitimately bigger than the available space, consider clipping it with a
RectClip widget before putting it in the flex, or using a scrollable container rather than a Flex,
for example using ListView.
The specific RenderFlex in question is:
RenderFlex#cc264 relayoutBoundary=up12 OVERFLOWING
creator: Row ← SizedBox ← DefaultTextStyle ← Stack ← Listener ← _GestureSemantics ←
RawGestureDetector ← GestureDetector ← DropdownButton ← ConstrainedBox ← Container ←
RepaintBoundary-[<3>] ← ⋯
direction: horizontal
mainAxisAlignment: space-between
mainAxisSize: min
crossAxisAlignment: center
textDirection: ltr
verticalDirection: down
我尝试了以下几种方法,但它们都不起作用:
- 将下拉菜单包裹在“行”、“列”、“填充”和“剪辑矩形”中
有人可以帮助我理解这个问题,并展示如何修复吗?
更新
使用FittedBox
可以防止溢出,但是文本大小会变得难以辨认。