dart Flutter:溢出时使用Expanded裁剪列

t9aqgxwy  于 2022-12-20  发布在  Flutter
关注(0)|答案(2)|浏览(175)

我的用例是:
列中有3个小部件:窗口小部件1和3是固定高度的,窗口小部件2将扩展可用内容。

Container(
            height: 300,               // h0: dynamic height
            child: Column(
              children: [
                Container(
                  color: Colors.green,
                  width: 100,          // h1: fixed height
                  height: 100,
                ),
                Expanded(
                  child: Container(
                    color: Colors.red,
                    width: 100,        // h2: fill remain content
                    child: Placeholder(),
                  ),
                ),
                Container(
                  color: Colors.blue,
                  width: 100,          // h3: fixed height
                  height: 100,
                ),
              ],
            ),
          )
  • 当h 0〉h1 + h3时:
  • 显示所有3个小部件-〉通过
  • 当h 0〈h1 + h3时:
  • 显示小部件1和3,展开的小部件将不可见-〉通过
  • 如果溢出则剪切内容-〉失败内容未被剪切并显示警告底部溢出

我不能使用ScrollView,因为Expanded中的内容应该是灵活的,而ScrollView不支持这样的行为。
我可以使用ClipRect来剪切溢出内容,但警告底部溢出仍然存在。有没有办法消除警告?

de90aj5v

de90aj5v1#

尝试将Column Package 为SingleChildScrollView

Container(
  height: 300, // h0: dynamic height
  child: CustomScrollView(
    slivers: [
      SliverFillRemaining(
        hasScrollBody: false,
        child: Column(
          children: [
            Container(
              color: Colors.green,
              width: 100, // h1: fixed height
              height: 100,
            ),
            Expanded(
              child: Container(
                color: Colors.red,
                width: 100, // h2: fill remain content
                child: Placeholder(),
              ),
            ),
            Container(
              color: Colors.blue,
              width: 100, // h3: fixed height
              height: 100,
            ),
          ],
        ),
      ),
    ],
  ),
),
t3psigkw

t3psigkw2#

你可以试试看:

Container(
        height: 300,
        child: SingleChildScrollView(
          child: Column(
            mainAxisSize: MainAxisSize.min,
            children: [
              Container(
                color: Colors.green,
                width: 100, // h1: fixed height
                height: 100,
              ),
              Flexible(
                fit: FlexFit.loose,
                child: Container(
                  color: Colors.red,
                  width: 100, // h2: fill remain content
                  child: Placeholder(),
                ),
              ),
              Container(
                color: Colors.blue,
                width: 100, // h3: fixed height
                height: 100,
              ),
            ],
          ),
        ), 
      ),

相关问题