让我们实现一个更好看的内部阴影按钮

关键代码

js 复制代码
  @override
  void paint(Canvas canvas, Size size) {
    var rect = RRect.fromLTRBR(0, 0, size.width, size.height,Radius.circular(20));

    canvas.save();
    var topLeftPath = Path()..addRRect(RRect.fromLTRBR(0, 0, size.width * 9/ 10 , size.height * 9/ 10 ,Radius.circular(20)).shift(Offset(-5, -5)));
    var topLeftPainter = Paint()
      ..color = Colors.white.withValues(alpha: 0.8)
      ..maskFilter = MaskFilter.blur(
          BlurStyle.normal, 10
      );
    canvas.drawPath(topLeftPath, topLeftPainter);

    var bottomRightPath = Path()..addRRect(RRect.fromLTRBR(size.width / 10, size.height / 10, size.width  , size.height ,Radius.circular(20)).shift(Offset(5, 5)));
    var bottomRightPainter = Paint()
      ..color = Colors.black.withValues(alpha: 0.8)
      ..maskFilter = MaskFilter.blur(
          BlurStyle.normal, 10
      );
    canvas.drawPath(bottomRightPath, bottomRightPainter);
    canvas.restore();

    var contentPath = Path()..addRRect(rect);

    var contentPainter = Paint()
      ..color = Colors.grey;
    canvas.drawPath(contentPath, contentPainter);


    canvas.save();
    var topLeftInnerPath = Path()..addRRect(RRect.fromLTRBR(0, 0, size.width , size.height ,Radius.circular(20)).shift(Offset(-size.width * 1 /4, -size.height  * 1/4)));
    canvas.clipRRect(rect.deflate(2));
    var topLeftInnerPainter = Paint()
      ..color = Colors.black.withAlpha(100)
      ..maskFilter = MaskFilter.blur(
          BlurStyle.normal, 30
      );

    canvas.drawPath(topLeftInnerPath, topLeftInnerPainter);

    var bottomRightInnerPath = Path()..addRRect(RRect.fromLTRBR(0, 0, size.width , size.height ,Radius.circular(20)).shift(Offset(size.width * 1 /4, size.height  * 1/4)));
    canvas.clipRRect(rect);
    var bottomRightInnerPainter = Paint()
      ..color = Colors.white.withAlpha(100)
      ..maskFilter = MaskFilter.blur(
          BlurStyle.normal, 30
      );
    canvas.drawPath(bottomRightInnerPath, bottomRightInnerPainter);

    canvas.restore();

  }
相关推荐
王晓枫2 小时前
flutter接入三方库运行报错:Error running pod install
前端·flutter
砖厂小工8 小时前
用 GLM + OpenClaw 打造你的 AI PR Review Agent — 让龙虾帮你审代码
android·github
张拭心9 小时前
春节后,有些公司明确要求 AI 经验了
android·前端·人工智能
张拭心9 小时前
Android 17 来了!新特性介绍与适配建议
android·前端
shankss10 小时前
Flutter 下拉刷新库 pull_to_refresh_plus 设计与实现分析
flutter
Kapaseker11 小时前
Compose 进阶—巧用 GraphicsLayer
android·kotlin
黄林晴11 小时前
Android17 为什么重写 MessageQueue
android
忆江南1 天前
iOS 深度解析
flutter·ios
明君879971 天前
Flutter 实现 AI 聊天页面 —— 记一次 Markdown 数学公式显示的踩坑之旅
前端·flutter