Flutter 获取Flatter中的LayoutBuilder高度
我有一行包含一个扩展(LayoutBuilder(用户可以更改垂直大小的小部件)),右边有一列,如代码所示。我希望列的高度等于左侧小部件的高度(垂直长度)。列的高度也应该能够根据左侧小部件的高度进行更改Flutter 获取Flatter中的LayoutBuilder高度,flutter,flutter-layout,Flutter,Flutter Layout,我有一行包含一个扩展(LayoutBuilder(用户可以更改垂直大小的小部件)),右边有一列,如代码所示。我希望列的高度等于左侧小部件的高度(垂直长度)。列的高度也应该能够根据左侧小部件的高度进行更改 Scaffold( backgroundColor: Colors.blue, body: Center( child: Row(children: <Widget>[ Expanded( child
Scaffold(
backgroundColor: Colors.blue,
body: Center(
child: Row(children: <Widget>[
Expanded(
child: Container(
color: Colors.grey,
child: LayoutBuilder(builder: (context, size) {
return TextField(
maxLines: null,
);
}),
),
),
Container(
color: Colors.red,
child: Column(
children: <Widget>[
InkWell(
child: Icon(Icons.keyboard_arrow_up),
onTap: () {},
),
InkWell(
child: Icon(Icons.keyboard_arrow_down),
onTap: () {},
),
],
),
)
]),
),
);
脚手架(
背景颜色:Colors.blue,
正文:中(
子对象:行(子对象:[
扩大(
子:容器(
颜色:颜色。灰色,
子级:LayoutBuilder(生成器:(上下文,大小){
返回文本字段(
maxLines:null,
);
}),
),
),
容器(
颜色:颜色,红色,
子:列(
儿童:[
墨水池(
子:图标(图标、键盘箭头向上),
onTap:(){},
),
墨水池(
子:图标(图标。键盘箭头向下),
onTap:(){},
),
],
),
)
]),
),
);
看起来像这样。我的第一个解决方案是以某种方式获取LayoutBuilder高度,并将其用于列的容器。任何其他更好的方法,使它的外观和行为相同的描述是罚款
您可以将
行
放在布局生成器
中,如下所示:
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text("")),
body: Container(
child: LayoutBuilder(builder: (context, size) {
return Row(
crossAxisAlignment: CrossAxisAlignment.stretch,
children: <Widget>[
Flexible(
child: Container(
color: Colors.grey,
child: TextField(
maxLines: null,
),
),
),
Container(
color: Colors.red,
child: Column(
children: <Widget>[
InkWell(
child: Icon(Icons.keyboard_arrow_up),
onTap: () {},
),
InkWell(
child: Icon(Icons.keyboard_arrow_down),
onTap: () {},
),
],
),
)
],
);
}),
),
);
}
@覆盖
小部件构建(构建上下文){
返回脚手架(
appBar:appBar(标题:文本(“”),
主体:容器(
子级:LayoutBuilder(生成器:(上下文,大小){
返回行(
crossAxisAlignment:crossAxisAlignment.stretch,
儿童:[
灵活的(
子:容器(
颜色:颜色。灰色,
孩子:TextField(
maxLines:null,
),
),
),
容器(
颜色:颜色,红色,
子:列(
儿童:[
墨水池(
子:图标(图标、键盘箭头向上),
onTap:(){},
),
墨水池(
子:图标(图标。键盘箭头向下),
onTap:(){},
),
],
),
)
],
);
}),
),
);
}
编辑:这将使行的高度
取其父行的高度
如果希望
行
的高度为最小高度,则在这种情况下,可以使用内部八位来包装行
,请注意使用IntrinsicHeight
可能会很昂贵,因此如果可以重新构造小部件以避免它,请不要每次都使用它。问题是我无法将整个内容包装到另一列或列表视图中,因为它试图获取最大高度,即无限高。我希望LayoutBuilder使用的最小高度正好等于文本字段的大小;但是,我会使用很多这样的小部件(可能超过25个),因此这可能不是理想的解决方案。我认为在这里使用LimitedBox和FittedBox会更便宜。您可以在容纳列的容器上放置一个对齐属性,以便使其最大限度地扩展。还可以使用mainAxisSize:mainAxisSize.max属性使列完全展开。利用列中的对齐属性,让孩子们做他们需要的事情。@AdrianMurray我不确定我是否理解您的帮助,请随意提交一个示例代码作为完整答案。