You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Flutter的GridView容器中实现指定阴影效果?

解决GridView中Container阴影不符合预期的问题

问题分析

原代码里的BoxShadow参数设置不合理:

  • spreadRadius:5会让阴影过度扩散,导致网格间的阴影互相重叠,视觉效果厚重杂乱
  • 单一阴影无法精准实现左右+底部的轻微阴影需求

修改后的代码

GridView.builder(
  padding: EdgeInsets.symmetric(horizontal: 15),
  scrollDirection: Axis.vertical,
  physics: BouncingScrollPhysics(),
  gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
    crossAxisCount: 3,
    crossAxisSpacing: 15,
    mainAxisSpacing: 20,
    childAspectRatio: 2 / 3.3,
  ),
  primary: false,
  shrinkWrap: true,
  itemCount: 100,
  itemBuilder: (context, index) {
    return Container(
      decoration: BoxDecoration(
        color: Colors.white,
        borderRadius: BorderRadius.circular(10),
        boxShadow: [
          // 底部阴影:柔和扩散
          BoxShadow(
            color: Colors.black12,
            blurRadius: 4,
            spreadRadius: 0,
            offset: Offset(0, 2),
          ),
          // 左侧轻微阴影
          BoxShadow(
            color: Colors.black12,
            blurRadius: 2,
            spreadRadius: 0,
            offset: Offset(-1, 0),
          ),
          // 右侧轻微阴影
          BoxShadow(
            color: Colors.black12,
            blurRadius: 2,
            spreadRadius: 0,
            offset: Offset(1, 0),
          ),
        ]),
    );
  },
),

参数调整说明

  • 把spreadRadius改为0:避免阴影过度扩散,防止网格项之间的阴影互相干扰
  • 拆分独立阴影:分别控制底部、左侧、右侧的阴影强度与方向,精准匹配需求
  • 差异化blurRadius:底部用4保证柔和度,左右用2突出"轻微"的视觉效果
  • 明确offset:指定阴影偏移方向,让阴影位置更贴合预期

如果想要更简洁的实现方式,也可以用单一阴影优化参数,同样能接近需求效果:

BoxShadow(
  color: Colors.black12,
  blurRadius: 6,
  spreadRadius: 0,
  offset: Offset(0, 3), // 主要向下偏移,左右自然模糊扩散
)

内容的提问来源于stack exchange,提问作者Ayan Khan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 21:46:04