首页 文章

颤振布局障碍

提问于
浏览
0

我对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

    选项1:

    使用Expanded替换Container小部件,它将在可用空间上展开,如下所示

    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计算所需的高度 . 不确定这是否有效,或者即使这是一个好习惯 .

相关问题