我对flutter相对比较陌生——我已经在我的应用程序上工作了几个月,在某些领域取得了很好的进展,但在其他领域却没有。我很难找到正确的方法来布局我的一系列屏幕,所有这些屏幕在某些方面都有点相似。
简言之,除了应用程序栏,脚手架将容纳一个容器,在其中我有一个Cupertino分段控制。分段控件用于在“低于”索引堆栈控件之间切换。
堆栈的每个子级都可以有不同的内容-有时是一个ListView,有时是一个包含许多文本输入、开关等的窗体。所以这个结构在逻辑上看起来是这样的:

Body
  SegmentedControl
  IndexStack
    Child 1
    Child N

我的问题是我想要/需要堆栈的所有子元素来“填充主体的剩余区域”。所以,如果我能在这里编一些数字,例如:设备是600像素高,AppBar是40,分段控制是60,每个堆栈子级留下500像素。但实际上,我似乎无法推断出我身体的“剩余内容高度”。我希望(和思考)有某种类型的布局小部件或容器小部件“自动调整到所有剩余空间大小”,但到目前为止还没有找到它。我尝试过许多不同的小部件组合,但似乎没有一个能做到这一点。下面是我的布局代码的压缩块:
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的容器一个有限的高度(和某种宽度),renderbox就无法绘制,也就是说,我会出错。挑战是让堆栈子级占用尽可能多的水平和垂直空间,并且在内容超出布局高度的情况下,使其内容“可滚动”。我会尝试任何人建议的…我肯定有办法做到这一点。
谢谢!

最佳答案

选项1:
用展开的容器小部件替换容器小部件,该小部件将在可用空间上展开,如下所示

   Expanded(
   //Container(
    //height: 400.0, //needs to be 'all the rest' instead of a constant
   // width: double.infinity,
    child: ListView(

扩展文档:https://docs.flutter.io/flutter/widgets/Expanded-class.html
选项2:
使用mediaquery.of(context).size.height计算所需高度。不确定这是否有效,甚至这是一个良好的做法。

关于flutter - flutter 布局障碍,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53620649/

10-14 03:34