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

关键代码

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();

  }
相关推荐
hnlgzb1 分钟前
常见的Android Jetpack库会有哪些?这些库中又有哪些常用类的?
android·android jetpack
键盘鼓手苏苏3 小时前
Flutter 三方库 p2plib 的鸿蒙化适配指南 - 实现高性能的端到端(P2P)加密通讯、支持分布式节点发现与去中心化数据流传输实战
flutter·harmonyos·鸿蒙·openharmony
加农炮手Jinx3 小时前
Flutter for OpenHarmony:postgrest 直接访问 PostgreSQL 数据库的 RESTful 客户端(Supabase 核心驱动) 深度解析与鸿蒙适配指南
数据库·flutter·华为·postgresql·restful·harmonyos·鸿蒙
加农炮手Jinx3 小时前
Flutter 组件 heart 适配鸿蒙 HarmonyOS 实战:分布式心跳监控,构建全场景保活检测与链路哨兵架构
flutter·harmonyos·鸿蒙·openharmony
钛态3 小时前
Flutter 三方库 http_mock_adapter — 赋能鸿蒙应用开发的高效率网络接口 Mock 与自动化测试注入引擎(适配鸿蒙 HarmonyOS Next ohos)
android·网络协议·flutter·http·华为·中间件·harmonyos
王码码20353 小时前
Flutter for OpenHarmony:Flutter 三方库 algoliasearch 毫秒级云端搜索体验(云原生搜索引擎)
android·前端·git·flutter·搜索引擎·云原生·harmonyos
王码码20353 小时前
Flutter 三方库 dns_client 的鸿蒙化适配指南 - 告别 DNS 劫持、探索 DNS-over-HTTPS (DoH) 技术、构建安全的鸿蒙网络请求环境
flutter·harmonyos·鸿蒙·openharmony·dns_client
键盘鼓手苏苏3 小时前
Flutter 组件 highlighter 适配鸿蒙 HarmonyOS 实战:高性能语法高亮,构建大规模代码分析与文本染色架构
flutter·harmonyos·鸿蒙·openharmony
国医中兴3 小时前
Flutter 三方库 langchain_google 的鸿蒙化适配指南 - 链接 Gemini 智慧中枢、LangChain AI 实战、鸿蒙级智能应用专家
flutter·langchain·harmonyos
左手厨刀右手茼蒿3 小时前
Flutter for OpenHarmony: Flutter 三方库 shamsi_date 助力鸿蒙应用精准适配波斯历法(中东出海必备)
android·flutter·ui·华为·自动化·harmonyos