如何使用Flutter“wrap_content”列中水平ListView的高度

imzjd6km  于 2023-05-30  发布在  Flutter
关注(0)|答案(1)|浏览(198)

使用Flutter,我如何动态分配Column中水平ListView的高度,以准确地占用ListView项所需的高度。
例如,下面的代码片段显示了一个列,其中有两个主要的子小部件,一个ColoredBox和一个ListView.BuilderListView.builderSizedBox Package ,SizedBox指定其高度为40,而ColoredBoxExpanded Package ,允许其占用Column中的所有剩余高度。

Column(
        crossAxisAlignment: CrossAxisAlignment.stretch,
        children: [
          const Expanded(
            child: ColoredBox(
              color: Colors.green,
              child: Text('Expanded top widget'),
            ),
          ),
          SizedBox(
            height: 40,
            child: ListView.builder(
              scrollDirection: Axis.horizontal,
              itemCount: 5,
              itemBuilder: (BuildContext context, int index) {
                return Card(
                  child: Padding(
                    padding: const EdgeInsets.all(8),
                    child: Text('Card $index'),
                  ),
                );
              },
            ),
          )
        ],
      )

这运行时没有错误,但需要ListView.builderSizedBox Package 以定义显式高度,如果SizedBox被删除,则会发生unbounded height异常。
我试图让ListView根据它的子元素占用一个动态的高度,但我在让它工作时遇到了麻烦。
我试过将ListView的shrinkWrap设置为true,但没有帮助。
我还验证了您可以将ListView和上面的Text小部件 Package 在Expanded中,并为它们分配flex值,以根据屏幕的百分比为它们分配高度,而不会出错,但这仍然不是我想要实现的。
有没有一种方法可以让ListView.builder根据其子元素(在本例中是Cards)动态分配其高度,而不像在原生Android XML布局文件中将视图的高度设置为“wrap_content”那样显式地以像素或屏幕高度百分比分配其高度?

km0tfn4u

km0tfn4u1#

add all in a Container with a specified size
exemple

@override
  Widget build(BuildContext context) {
    final Size size = MediaQuery.of(context).size;

Container(
            width: size.width * 0.98,
            height: size.height * 0.98,
            color: Colors.blue,
            child: your Column,
          ),

如果它工作箭头向上有美好的一天

相关问题