Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter 获取Flatter中的LayoutBuilder高度_Flutter_Flutter Layout - Fatal编程技术网

Flutter 获取Flatter中的LayoutBuilder高度

Flutter 获取Flatter中的LayoutBuilder高度,flutter,flutter-layout,Flutter,Flutter Layout,我有一行包含一个扩展(LayoutBuilder(用户可以更改垂直大小的小部件)),右边有一列,如代码所示。我希望列的高度等于左侧小部件的高度(垂直长度)。列的高度也应该能够根据左侧小部件的高度进行更改 Scaffold( backgroundColor: Colors.blue, body: Center( child: Row(children: <Widget>[ Expanded( child

我有一行包含一个扩展(LayoutBuilder(用户可以更改垂直大小的小部件)),右边有一列,如代码所示。我希望列的高度等于左侧小部件的高度(垂直长度)。列的高度也应该能够根据左侧小部件的高度进行更改

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我不确定我是否理解您的帮助,请随意提交一个示例代码作为完整答案。