flutter裁剪三角形,并设置三角形最长边阴影(类似钉钉登录页右上角图标样式)

news2024/11/16 18:09:05

需求

需要使用flutter创建类似钉钉登录页右上角图表样式

在这里插入图片描述

过程

图标

图标直接从阿里巴巴图标库中下载png文件,并设置相应颜色

三角形阴影

样式的主要难点在三角形及三角形阴影这里

1、三角形的裁剪有两种方法:
  • 第一种是 使用边框实现三角形
    参考博客:使用边框设置三角形
    效果:可以看到明显的白色分割线,所以这个方法 pass
    在这里插入图片描述

    实现代码:

Container(
            width: 0,
            height: 0,
            margin: EdgeInsets.all(100),
            decoration: const BoxDecoration(
              border: Border(
                // 四个值 top right bottom left
                bottom: BorderSide(
                    color: Colors.transparent, // 朝上; 其他的全部透明transparent或者不设置
                    width: 100,
                    style: BorderStyle.solid),
                right: BorderSide(
                    color: Colors.transparent, // 朝左;  把颜色改为目标色就可以了;其他的透明
                    width: 100,
                    style: BorderStyle.solid),
                left: BorderSide(
                    color: Colors.blue, // 朝右;把颜色改为目标色就可以了;其他的透明
                    width: 100,
                    style: BorderStyle.solid),
                top: BorderSide(
                    color: Colors.blue, // 朝下;  把颜色改为目标色就可以了;其他的透明
                    width: 100,
                    style: BorderStyle.solid),
              ),
            ),
          ),
  • 第二种方法:使用ClipPath 按照自定义的路径剪裁
    参考博客:flutter-剪裁(Clip)
    效果:可以看到,一个完整的三角形就出现了
    在这里插入图片描述
    代码:
//绘制三角形
class __MyPathClipper extends CustomClipper<Path> {
  
  Path getClip(Size size) {
    var path = Path();
    path.moveTo(size.width, 0);
    path.lineTo(0, size.height); //图片的左下角坐标
    path.lineTo(size.width, size.height); //图片的右下角左边
    path.close();
    return path;
  }

  
  bool shouldReclip(CustomClipper<Path> oldClipper) {
    return false;
  }
}

//使用
 ClipPath(
 clipper: __MyPathClipper(),
     child: Container(
          color: Colors.red,
          width: 200,
          height: 200,
 )),
2、阴影效果

在阴影效果这方面,我尝试了很多
首先,直接使用Container自带的decoration属性设置阴影,但是效果并不明显,无论怎样尝试,阴影都是一条直线,没有渐变效果
在这里插入图片描述
代码:

ClipPath(
 clipper: __MyPathClipper(),
 child: Container(
    width: 60,
    height: 60,
    decoration: const BoxDecoration(
    color: Color.fromRGBO(250, 250, 250, 1),
    boxShadow: [
    BoxShadow(
      color: Colors.grey,
      offset:Offset(-3, -3),
      blurRadius: 2),
 ])))

后来,想到可以使用渐变色来模拟阴影效果
得到了最终的样式
在这里插入图片描述
代码:

ClipPath(
  clipper: __MyPathClipper(),
  child: Container(
     width: 60,
     height: 60,
     decoration: const BoxDecoration(
     gradient: LinearGradient(
         begin: Alignment.topLeft, 
         end: Alignment.bottomRight,
         stops: [0.0, 0.495 ],//渐变的位置  起始位置 到 终止位置
         colors: [//渐变的颜色,从颜色1 到 颜色2
           Color.fromARGB(255, 3, 3, 3),
           Color.fromRGBO(250, 250, 250, 1),
 ]))))

全部代码

Stack(
                                  children: <Widget>[
                                    const Positioned(
                                      top: 5,
                                      left: 5,
                                      child: Image(
                                        image: AssetImage('images/code.png'),
                                        width: 40,
                                        height: 40,
                                      ),
                                    ),
                                    Positioned(
                                        bottom: 0,
                                        right: 0,
                                        child: ClipPath(
                                            clipper: __MyPathClipper(),
                                            child: Container(
                                                width: 60,
                                                height: 60,
                                                decoration: const BoxDecoration(
                                                    gradient: LinearGradient(
                                                        begin: Alignment
                                                            .topLeft, //右上
                                                        end: Alignment
                                                            .bottomRight,
                                                        stops: [
                                                      0.0,
                                                      0.495
                                                    ],
                                                        colors: [
                                                      Color.fromARGB(
                                                          255, 3, 3, 3),
                                                      Color.fromRGBO(
                                                          250, 250, 250, 1),
                                                    ]))))),
                                  ],
                                ),

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/186588.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

springboot自动加载--自定义启动器

创建自定义启动器 0、项目总览 1、创建项目&#xff0c;引入依赖 创建项目 spring-boot-jdbc-starter&#xff0c;引入依赖&#xff0c;pom文件如下&#xff1a; <?xml version"1.0" encoding"UTF-8"?><project xmlns"http://maven.apa…

b站黑马Vue2后台管理项目笔记——(1)登录功能

说明&#xff1a; 此项目中使用的是本地SQL数据库&#xff0c;Vue2。 其他功能请见本人后续的其他相关文章。 本文内容实现的最终效果如下图&#xff1a; 目录 一&#xff0e;登录功能的实现 1.登录页面的布局&#xff1a; &#xff08;1&#xff09;查看当前工作区是否干净…

读锁应该插队吗?什么是锁的升降级?

背景 ReentrantReadWriteLock可以设置公平或非公平&#xff0c;为什么&#xff1f; 读锁插队策略 每次获取响应锁之前都要检查能否获取 readerShouldBlockwriterShouldBlock 公平锁 final boolean writerShouldBlock() {return hasQueuedPredecessors(); } final boolean …

打造智慧工地,低代码平台助力基建行业全链路数字化升级

编者按&#xff1a;基建行业数字化转型需求迫切&#xff0c;低代码平台有助于加快数字化转型速度&#xff0c;赋能建筑工程企业升级。本文分析了低代码在基建行业中的应用价值&#xff0c;并指出基建行业对于低代码平台的需求&#xff0c;最后通过相关案例的展示了低代码平台在…

低代码平台解读:“低代码+PaaS”的技术创新实践

数字化转型已经成为必然趋势&#xff0c;几乎所有传统行业都喊出了数字化转型的口号。但在数字化转型中&#xff0c;很多企业面临着成本高、周期长的难题。低代码是其中一种破解难题的方式&#xff0c;如今的低代码已经是企业数字化的核心引擎。 低代码平台越来越多&#xff0…

数据结构——链表(五)

数据结构 文章目录数据结构前言一、什么是链表二、实现单链表1.单链表的结构2.单链表的初始化3.单链表的插入4.遍历链表5.链表长度总结前言 接下来学习一下链表&#xff0c;链表比数组用的更多。 一、什么是链表 概念&#xff1a;链表是一种物理存储结构上非连续、非顺序的存…

《从0开始学大数据》之如何自己开发一个大数据SQL引擎

背景 大数据仓库 Hive&#xff0c;作为一个成功的大数据仓库&#xff0c;它将 SQL 语句转换成 MapReduce 执行过程&#xff0c;并把大数据应用的门槛下降到普通数据分析师和工程师就可以很快上手的地步。 但是 Hive 也有自己的问题&#xff0c;由于它使用自己定义的 Hive QL …

Linux常用命令——repquota命令

在线Linux命令查询工具(http://www.lzltool.com/LinuxCommand) repquota 报表的格式输出磁盘空间限制的状态 补充说明 repquota命令以报表的格式输出指定分区&#xff0c;或者文件系统的磁盘配额信息。 语法 repquota(选项)(参数)选项 -a&#xff1a;列出在/etc/fstab文…

gRPC 基础(二)-- Go 语言版 gRPC-go

gRPC-Go Github gRPC的Go实现:一个高性能、开源、通用的RPC框架&#xff0c;将移动和HTTP/2放在首位。有关更多信息&#xff0c;请参阅Go gRPC文档&#xff0c;或直接进入快速入门。 一、快速入门 本指南通过一个简单的工作示例让您开始在Go中使用gRPC。 1.1 先决条件 Go:…

word排版技巧:这几种特殊版式轻松搞定

我们在许多报刊、杂志中会见到一些带有特殊效果的文档&#xff0c;如首字下沉、分栏排版、竖排文档等形式的排版效果。这些效果其实不是只有专业排版软才能实现&#xff0c;利用Word我们可以轻松完成这些排版效果。1、首字下沉首字下沉是一种突出显示段落中的第一个汉字的排版方…

3小时快速上手sharding-jdbc

今日目标 1、理解分库分表基础概念【垂直分库分表、水平分库分表】 2、能够说出sharding-jdbc为我们解决什么问题 3、理解sharding-jdbc中的关键名词 4、理解sharding-jdbc的整体架构及原理 5、掌握sharding-jdbc的集成方式1.分库分表介绍 1.1 分库分表概述 分库分表就是为了…

普元EOS_工作流引擎相关数据表记录---工作流工作笔记002

由于现在在用普元的工作流引擎,但是,说明文档中没有对数据表的说明 所以整理一下记录下来: 业务流程(com.eos.workflow.data.WFProcessDefine) 属性 名称 类型 processDefID 业务流程ID long processDefName 业务流程名称 String processChName 业务流程显示名称 String desc…

计算机图形学 第5章 二维变换与裁剪完结

目录中点分割直线段裁剪算法中点计算公式代码Liang-Barsky直线段裁剪算法⭐⭐⭐代码&#xff1a;多边形裁剪算法/Sutherland-Hodgman裁剪算法代码相关学习资料&#xff1a;中点分割直线段裁剪算法 中点分割直线段裁剪算法对Cohen-Sutherland直线裁剪算法的第3种情况做了改进&a…

Centos 安装部署 Sentinel

在微服务架构中&#xff0c;业务高峰时段&#xff0c;请求过多可能导致直接查询数据库&#xff0c;造成雪崩等事故。 一、雪崩问题 微服务调用链路中某个服务故障&#xff0c;引起整个链路中所有服务不可用。 解决方案 1&#xff09;超时处理 设置超时时间&#xff0c;请求超…

最近超火的ChatGPT到底怎么样?体验完后我有哪些感受和思考?

✔️本文主题&#xff1a;ChatGPT 人工智能 ✔️官方网站&#xff1a;chat.openai.com 文章目录前言二、初识三、深入四、编程相关编写纠错五、感想六、展望七、结语前言 大家好&#xff0c;这次我们来聊一聊最近超级火的人工智能语音——ChatGPT&#xff01; ChatGPT是什么&…

从 synchronized 到 CAS 和 AQS的超详细解析

文章目录一、Synchronized 关键字二、悲观锁和乐观锁三、公平锁和非公平锁四、可重入锁和不可重入锁五、CAS5.1、操作模型5.2、重试机制&#xff08;循环 CAS&#xff09;5.3、底层实现5.4、ABA 问题六、可重入锁 ReentrantLock七、AQS7.1、请求锁7.2、创建 Node 节点并加入链表…

Vue3组合式API

Vue3组合式APIcomposition API 和 options API体验 composition APIsetup 函数reactive 函数ref 函数script setup语法composition API 和 options API vue2 采用的就是 optionsAPI (1) 优点:易于学习和使用, 每个代码有着明确的位置 (例如: 数据放 data 中, 方法放 methods中)…

Mac 打开JD-GUI报错:ERROR launching ‘JD-GUI‘

目录一、JD-GUI下载二、JD-GUI报错信息三、解决方案1、查找JD-GUI包内容2、修改universalJavaApplicationStub.sh文件一、JD-GUI下载 JD-GUI下载地址&#xff1a;https://github.com/java-decompiler/jd-gui/releases 二、JD-GUI报错信息 Mac系统版本&#xff1a;11.3 JD-GUI…

智能车|自主导航 ROS Navigation Stack 功能包 简介与编译

智能车|自主导航 ROS Navigation Stack 功能包 简介与编译前言功能包下载与编译前言 ros功能包&#xff1a;Navigation ros wiki&#xff1a;http://wiki.ros.org/navigation github 地址&#xff1a;https://github.com/ros-planning/navigation 功能包简介&#xff1a; ROS…

第一次创业,注册什么类型的公司?

前言 几乎每一个打工者都有一颗当老板的心&#xff0c;大喊一声&#xff1a;"大丈夫生居天地间,岂能郁郁久居人下"&#xff0c;于是一拍桌子就辞职创业&#xff0c;现实往往都是潦草收场&#xff0c;看下面一段统计数据&#xff1a; 中国小微企业平均存活周期4.13年&…