Flutter如何制作如图所示的自定义Tab指示器?

CustomPaint阴影失效的解决思路
- 别直接用
Canvas.drawXXX画完就想有阴影,得先画阴影层再画主体:@override void paint(Canvas canvas, Size size) { // 阴影画笔 final shadowPaint = Paint() ..color = Colors.black.withOpacity(0.3) ..maskFilter = const MaskFilter.blur(BlurStyle.normal, 3.0); // 先画阴影(替换成你自己的路径/RRect) canvas.drawRRect(RRect.fromRectAndRadius( Rect.fromLTWH(10, 10, size.width-20, size.height-20), const Radius.circular(8)), shadowPaint); // 再画指示器主体 final fillPaint = Paint()..color = Colors.white; canvas.drawRRect(RRect.fromRectAndRadius( Rect.fromLTWH(10, 10, size.width-20, size.height-20), const Radius.circular(8)), fillPaint); } - 检查父组件的
clipBehavior,如果是Clip.hardEdge或其他裁剪值,阴影会被裁掉,改成Clip.none即可。 - 确保你的绘制路径是闭合的,开放路径没法生成阴影。
- 把CustomPaint的
willChange设为true,让Flutter识别组件的动态变化,有助于阴影正确渲染。
内容的提问来源于stack exchange,提问作者DpN
相关产品推荐
相关产品推荐

