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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 09:15:37