flutter如何实现阴影效果
在Flutter中如何给Widget添加阴影效果?我看到有些App的按钮和卡片有很漂亮的阴影,但不知道具体怎么实现。是用BoxShadow还是Elevation?能否提供一个简单的代码示例说明这两种方式的区别和适用场景?最好能解释下阴影颜色、偏移量和模糊度这些参数的调整方法。
2 回复
在Flutter中,可以通过以下几种方式实现阴影效果:
1. Container的BoxShadow
Container(
width: 200,
height: 200,
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.circular(8),
boxShadow: [
BoxShadow(
color: Colors.grey.withOpacity(0.5),
spreadRadius: 2,
blurRadius: 7,
offset: Offset(0, 3), // 阴影位置
),
],
),
)
2. Card组件(自带阴影)
Card(
elevation: 8, // 阴影强度
child: Container(
width: 200,
height: 200,
child: Text('带阴影的卡片'),
),
)
3. Material组件
Material(
elevation: 10,
borderRadius: BorderRadius.circular(12),
child: Container(
width: 200,
height: 200,
padding: EdgeInsets.all(16),
child: Text('Material阴影'),
),
)
4. 物理效果阴影(Cupertino风格)
PhysicalModel(
color: Colors.white,
elevation: 6,
borderRadius: BorderRadius.circular(8),
child: Container(
width: 200,
height: 200,
child: Text('物理阴影效果'),
),
)
主要参数说明:
- color: 阴影颜色
- blurRadius: 模糊半径(值越大越模糊)
- spreadRadius: 扩散半径(值越大阴影范围越大)
- offset: 阴影偏移量(x,y方向)
- elevation: 阴影高度(仅Material和Card)
选择哪种方式取决于具体需求:BoxShadow最灵活,Card适合卡片式布局,Material适合Material Design风格,PhysicalModel提供更真实的物理效果。


