我对Flutter来说相对较新 - 已经在我的应用程序上工作了几个月,并且在某些方面取得了很好的进展,但其他方面都取得了很好的进展 . 我无法找出布局我的一系列屏幕的“正确方法”,所有这些屏幕在某些方面都有些相似 .
简而言之,除了应用程序栏,脚手架将容纳一个容器,其中我有一个Cupertino分段控件 . 分段控件用于在“低于”它的IndexedStack控件之间切换 .
堆栈中的每个子节点都可以有不同的内容 - 有时是listview,有时是带有许多文本输入,开关等的表单 . 所以结构可能在逻辑上看起来像这样:
Body
SegmentedControl
IndexStack
Child 1
Child N
我的问题是我想要/需要堆叠中的所有孩子“填充身体的剩余区域” . 所以,如果我可以在这里编写一些数字,例如:设备高600像素,appbar需要40,分段控制需要60,每个堆栈子项需要500 px . 但在实践中,我似乎无法推断出我身体的“剩余内容高度” . 我希望(并且认为)有某种类型的布局小部件或容器小部件“自动调整到所有剩余空间”但尚未找到它 . 我尝试了许多不同小部件的许多组合,似乎没有一个可以解决问题 . 这是我的布局代码的精简块:
body: Container(
child: Column(
crossAxisAlignment: CrossAxisAlignment.center,
children: <Widget>[
Padding(
padding: const EdgeInsets.only(top: 16.0, bottom: 16.0),
child: CupertinoSegmentedControl(
children: tabOptions,
onValueChanged: tabChanged,
groupValue: curTabIndex,
),
),
Container(
height: 400.0, //needs to be 'all the rest' instead of a constant
width: double.infinity,
child: ListView(
children: <Widget>[
Text(“Example Text - would really be list tiles"),
Text(“displaying results of database query"),
],
),
),
],
),
),
我只显示了索引堆栈的一个子节点 . 在实践中我可以有几个 . 如果我没有给持有ListView的Container一个有限的高度(以及某种宽度),RenderBox就无法绘制,即我得到错误 . 挑战在于让堆栈子项占用尽可能多的水平和垂直空间,并且在内容超出布局高度的情况下使其内容“可滚动” . 我会尝试任何人的建议......我确信有办法做到这一点 .
谢谢!
1 回答
选项1:
使用Expanded替换Container小部件,它将在可用空间上展开,如下所示
扩展文档:https://docs.flutter.io/flutter/widgets/Expanded-class.html
选项2:
使用MediaQuery.of(context).size.height计算所需的高度 . 不确定这是否有效,或者即使这是一个好习惯 .