You need to enable JavaScript to run this app. 如何在可滚动SliverList的Stack组件中正常放置Container?
优惠活动
大模型
产品
解决方案
定价
更多

如何在可滚动SliverList的Stack组件中正常放置Container?

问题原因
  • Stack默认会将自身尺寸调整为非定位/非对齐子组件的最大尺寸,你当前代码的Stack中未做对齐/定位约束的第一个Container高度为createSize(347, context),所以Stack整体高度被限制为347,底部对齐的307高度的Container会有部分高度超出Stack可视范围,才会出现无法正常展示的问题。
  • 你要实现的上层图片、下层圆角卡片叠在图片底部的布局,需要明确Stack的高度为两个组件叠加后的总高度,或者给Stack的子组件用Positioned明确位置约束。
修复后的代码示例
SliverList(
  delegate: SliverChildListDelegate([
    // 明确Stack总高度:图片高度 + 卡片超出图片的高度,数值可根据实际设计调整
    SizedBox(
      height: createSize(534, context), 
      child: Stack(
        children: [
          // 顶部背景图固定在上部
          Positioned(
            top: 0,
            left: 0,
            right: 0,
            child: Container(
              decoration: const BoxDecoration(
                image: DecorationImage(
                  fit: BoxFit.cover,
                  image: NetworkImage(
                      'https://idsb.tmgrup.com.tr/ly/uploads/images/2020/05/13/35552.jpeg'),
                ),
              ),
              height: createSize(347, context),
            ),
          ),
          // 底部卡片从图片下方指定位置开始,占满剩下的高度
          Positioned(
            top: createSize(227, context), // 数值控制卡片和背景图的重叠高度,可自行调整
            left: 0,
            right: 0,
            bottom: 0,
            child: Container(
              decoration: const BoxDecoration(
                color: Colors.white,
                borderRadius: BorderRadius.only(
                  topLeft: Radius.circular(24),
                  topRight: Radius.circular(24),
                ),
              ),
              // 卡片内部内容可以直接加在这里,也可以包裹SingleChildScrollView做独立滚动
            ),
          ),
        ],
      ),
    ),
    // 这里可以继续加其他内容组件,会跟着SliverList整体滚动
  ]),
)
补充说明

如果需要卡片内部内容独立于整体Sliver滚动,只需要给底部Container包裹SingleChildScrollView组件即可。

内容的提问来源于stack exchange,提问作者Abin Sunny

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.18 22:36:01