flutter 使列的列可滚动

5jvtdoz2  于 2023-05-29  发布在  Flutter
关注(0)|答案(1)|浏览(161)

我想做一个小部件滚动,这基本上是列包含其他列。
我的TreeWidget可能包含一个或多个TreeWidget,如下所示。我试着把它 Package 在一个SingleChildScroolView里面,就像这样:

SingleChildScrollView {
TreeWidget {
  TreeWidget{
    TreeWidget {
      Column {
         Text( 'something' )
         Text( 'something' )
      }
    }
  }
}
}

请注意,我事先并不知道任何TreeWidget的大小。除非我先把树向下走,收集高度,最后计算总高度。
渲染时,Flutter会抱怨无限大。

我的问题是:如何使一个递归的小部件像上面的滚动?

错误消息:
导致错误的相关小部件为:列列:文件:///..路径.../lib/main_widget.dart:46:16
溢出的RenderFlex的方向为Axis. vertical。溢出的RenderFlex边缘在渲染中用黄色和黑色条纹图案标记。这通常是由于内容对于RenderFlex来说太大而导致的。
考虑应用弹性系数(例如使用扩展的小部件),以强制RenderFlex的子对象适合可用空间,而不是调整到其自然大小。这被认为是一种错误情况,因为它表示存在无法查看的内容。如果内容确实大于可用空间,请考虑在将其放入Flex之前使用ClipRect小部件对其进行裁剪,或者使用可滚动容器而不是Flex,如ListView。

mm5n2pyu

mm5n2pyu1#

如果您的TreeWidget内部包含一个Column,您可能需要在其他列中的每一列中添加“Expanded”。例如:

SingleChildScrollView(
    child: Column(
        children: [
            Expanded( // you need to say that the column takes up the available space inside the other column
                child: Column(...)
            ),
            ...
        ]
    ),
);

和/或,您可以将所有内容 Package 在SizedBox中,并使用其height属性为其给予固定的高度。这个height属性也可以设置为MediaQuery.of(context).size.height,以便动态调整到全屏高度。

相关问题