(原创)Flutter基础入门:实现各种Shape效果

news2024/10/5 19:17:28

前言

上一篇博客讲了Flutter的装饰器Decoration
Flutter基础入门:装饰器Decoration
装饰器就可以帮我们实现各种Shape效果
但上篇文章并没有讲如何实现具体的Shape效果
那么具体要怎么做呢?这篇文章就主要讲这块
在Fluter中实现Shape效果时,一般要关注到的,就是以下几个类:
BorderRadiusGeometry(圆角)
ShapeBorder(描边)
color(填充)
Gradient(渐变)
BoxShadow(阴影)
所以当我们看到Flutter的一些容器组件或者Shape组件中有用到这五个类作为构造方法入参的时候
基本上就可以知道他要实现的功能是哪些
举个例子:
Container容器组件中需要传入一个Decoration装饰器属性
Decoration装饰器类是一个抽象类
他有一个实现类:BoxDecoration
里面就需要传入这些Shape相关的属性,如下:

  const BoxDecoration({
    this.color,
    this.image,
    this.border,//描边
    this.borderRadius,//圆角
    this.boxShadow,
    this.gradient,
    this.backgroundBlendMode,
    this.shape = BoxShape.rectangle,
  })

所以用BoxDecoration就可以去做一些Shape相关的效果
当然,不止这个,ShapeDecoration也有这样的属性:

  const ShapeDecoration({
    this.color,
    this.image,
    this.gradient,
    this.shadows,//阴影
    required this.shape,//描边
  })

还有我们的Card组件,也有这些属性:

  const Card({
    super.key,
    this.color,
    this.shadowColor,
    this.surfaceTintColor,
    this.elevation,
    this.shape,
    this.borderOnForeground = true,
    this.margin,
    this.clipBehavior,
    this.child,
    this.semanticContainer = true,
  })

那么这些属性具体需要如何配置好并传入呢?下面会逐个讲到

BorderRadiusGeometry:圆角

BorderRadiusGeometry是一个抽象类,主要用来实现圆角效果
他有两个实现类:BorderRadius和BorderRadiusDirectional
BorderRadiusDirectional主要是照顾到不同国家书写顺序而而设计的
BorderRadiusDirectional用来描述方向的属性名字为:TopStart和TopEnd
BorderRadius用来描述方向的属性名字为:TopLeft和TopRight
其实就和我们Android的MarginStart和MarginLeft的区别是一个意思
所以我们一般用BorderRadius就好
下面我们就用一个例子来说明具体的效果:

  Container(
    width: 100,
    height: 100,
    alignment: Alignment.center,
    decoration: const BoxDecoration(
      borderRadius: BorderRadius.only(
          topLeft: Radius.circular(10), bottomRight: Radius.circular(10)),
      color: Colors.blue, //填充色
    ),
    child: const Text('Button')
  ),

可以看到上面代码,实现的就是做上架和右下角的圆角效果
具体效果如下图:
在这里插入图片描述
当然BorderRadius还有其他的一些方法:
BorderRadius.circular(10):上下左右描边
BorderRadius.all(Radius.circular(10)):同上
BorderRadius.only(topLeft: Radius.circular(10), bottomRight: Radius.circular(10)):指定描边位置
BorderRadius.horizontal:指定左右描边
BorderRadius.vertical:指定上下描边

ShapeBorder:描边

ShapeBorder同BorderRadiusGeometry一样,也是个抽象类
但他的实现类就很多了
对于ShapeBorder可以实现的效果,可以参考这篇博客:
Flutter shape类型组件
但我们如果只是想描边,用它的实现类:Border或者BorderDirectional就好了
二者区别其实也是书写顺序区别而已,都可以用
下面看个例子:

Container(
  width: 100,
  height: 100,
  alignment: Alignment.center,
  decoration: const BoxDecoration(
    borderRadius: BorderRadius.all(Radius.circular(10)),
    color: Colors.blue,
    border: Border(
      top: BorderSide(
          color: Colors.orange, width: 5, style: BorderStyle.solid),
      right: BorderSide(
          color: Colors.orange, width: 5, style: BorderStyle.solid),
      bottom: BorderSide(
          color: Colors.orange, width: 5, style: BorderStyle.solid),
      left: BorderSide(
          color: Colors.orange, width: 5, style: BorderStyle.solid),
    ),
  ),
  child: const Text('Button')
),

如下图:
在这里插入图片描述

使用border时需要注意一个很重要的问题:
border是描边用的,单独使用可以指定上下左右其中一个位置的描边,
但是一旦和borderRadius圆角配合使用,
就必须要指定上下左右四个的描边(哪怕borderRadius只是设置了左上角的圆角)
不然运行就会报如下错误:
A borderRadius can only be given for uniform borders.

color:填充

Flutter中对于填充就很简单了,只需要设置BoxDecoration的color属性即可
上面的例子已经设置了,这里不再重复举例了

Gradient:渐变

Gradient抽象类也有三个实现类:
LinearGradient:线性渐变
SweepGradient:扫描式渐变
RadialGradient:放射性渐变,也可以叫扩散渐变
LinearGradient举例如下:

Container(
  width: 100,
  height: 100,
  alignment: Alignment.center,
  child: Text('Button'),
  decoration: BoxDecoration(
      gradient: LinearGradient(
          colors: [Colors.orange, Colors.greenAccent]),
      color: Colors.blue),
),

效果如图:
在这里插入图片描述
这里需要注意,当设置渐变色时原先设置的填充色就会失效。
SweepGradient:
代码就不贴了只是把LinearGradient替换即可。
在这里插入图片描述
RadialGradient
和SweepGradient一样,直接上效果图:
在这里插入图片描述

BoxShadow:阴影

BoxShadow不再是抽象类了,只不过一般组件都会要求传入一个BoxShadow集合
BoxShadow的具体属性有:

  const BoxShadow({
    super.color,//阴影颜色
    super.offset,//阴影的偏移量,有dx和dy
    super.blurRadius,//模糊程度
    this.spreadRadius = 0.0,//阴影大小
    this.blurStyle = BlurStyle.normal,//阴影风格
  })

blurRadius是高斯模糊的程度,spreadRadius是阴影的大小。
在一定范围内,增大blurRadius能使阴影扩散范围变大,
但是过了阈值,继续增大blurRadius阴影大小不会变大。但spreadRadius能持续变大。
这篇博客讲的很清楚:
BoxShadow阴影详解
下面是阴影效果的例子:

Container(
  width: 100,
  height: 100,
  alignment: Alignment.center,
  child: Text('Button'),
  decoration: BoxDecoration(boxShadow: [
    BoxShadow(
        color: Colors.greenAccent,
        offset: Offset(5, 5),
        blurRadius: 10)
  ], color: Colors.blue),
)

效果如图:
在这里插入图片描述
关于Flutter的Shape演示就到这里了

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

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

相关文章

Servlet(一)

目录 1.什么是Servlet 2.servlet程序 2.1 创建项目 2.2 引入依赖 2.3 创建目录 2.4 编写代码 2.5 打包程序 2.6 部署程序 2.7 验证程序 3.更简单的部署方法 3.1 安装 3.2配置 4.访问出错怎么办 4.1 404 4.2 405 4.3 500 4.4 空白页面 4.5 无法访问此页面 5.se…

Gin web框架初步认识

Goland使用及gin框架下载引入 第一次使用Goland时需要配置GOROOT、GOPATH、Go Modules 配置完成后进入面板,右键选择Go Modules文件,或者在go工作区通过命令go mod init [name]创建go mod项目。 创建完的项目一般都有go.mod文件和go.sum,前者…

Mysql【安装教程】

Mysql安装教程 1.安装教程 可以去官网下载这个版本的:mysql-installer-community-8.0.31.0 双击点开,选择自定义: 选择主键:左边选择之后就点蓝色按钮添加到右边去,next: 如果出现这个页面&#xff0c…

机器视觉检测系统的基本流程你知道吗

工业制造业种,首先我们便需要了解其基本流程,作为工厂信息科人员,我们不能只依靠视觉服务商的巡检驻检来解决问题,为了产线的效率提升,我们更多的应该培养产线技术人员,出现问题便可以最快速度解决问题&…

领跑新能源车市“下半场”,这家企业凭什么?

中国新能源汽车市场行至下半场,将围绕技术升级、产品竞争力比拼、整合淘汰等趋势快速发展。 4月7日,在北京水立方发布的奇瑞新能源之夜上,奇瑞汽车全面展示新战略、新技术、新品牌和新产品,宣布将以全新的技术生态加速向全球科技…

光伏电池片技术N型迭代,机器视觉检测赋能完成产量“弯道超车”

电池片是光伏发电的核心部件,其技术路线和工艺水平直接影响光伏组件的发电效率和使用寿命。随着硅料、硅片技术逐渐接近其升级迭代空间的瓶颈,电池片环节正处于技术变革期,是光伏产业链中迭代最快的部分。P型中PERC电池片是现阶段市场的主流产…

已知原根多项式和寄存器初始值时求LFSR的简单例子

线性反馈移位寄存器(LFSR)是一种用于生成伪随机数序列的简单结构。在这里,我们有一个四项原根多项式 p(x)1x0x21102p(x) 1 x 0x^2 110_2p(x)1x0x21102​ 和初始值 S0100S_0 100S0​100。我们将使用 LFSR 动作过程来生成一个伪随机序列。…

2023美赛春季赛_赛题原文及翻译

目录 Problem Y: Understanding Used Sailboat Prices Y题翻译: Problem Z: The Future of the Olympics Z题翻译: Problem Y: Understanding Used Sailboat Prices ​Like many luxury goods, sailboats vary in value as they age and as market c…

看这一篇就够了!!!Java最全面试手册(性能优化+微服务架构+并发编程+开源框架)

Java面试手册 一、性能优化面试专栏 1.1、 tomcat性能优化整理 ​ 1.2、JVM性能优化整理 1.3、Mysql性能优化整理 二、微服务架构面试专栏 2.1、SpringCloud面试整理 2.2、SpringBoot面试整理 2.3、Dubbo面试整理 三、并发编程高级面试专栏 四、开源框架面试题专栏 4.1、Sp…

[Data structure]稀疏数组

⭐作者介绍:大二本科网络工程专业在读,持续学习Java,努力输出优质文章 ⭐作者主页:逐梦苍穹 ⭐所属专栏:数据结构。数据结构专栏主要是在讲解原理的基础上拿Java实现,有时候有C/C代码。 ⭐如果觉得文章写的…

清肠化湿颗粒通过激活NLRP6信号和调节Th17/Treg平衡来改善DSS诱导的结肠炎

百趣代谢组学分享-文章标题:Qing-Chang-Hua-Shi granule ameliorates DSS-induced colitis by activating NLRP6 signaling and regulating Th17/Treg balance 代谢组学分享-发表期刊:Phytomedicine 代谢组学分享-影响因子:6.656 代谢组学…

python 对数函数

在 Python中,除了对数函数,还有其他的一些函数,例如: 这是一个在 python中用来计算两个整数之间的关系的函数。如果两个整数的值不同,则它们之间的关系是: 其中aa^2bb^2cc^2。下面是计算两个整数之间的关系…

微信小程序开发(学习记录1.0)

首先,把遇到的问题贴出来,主要是这个解决问题的思路,供大家参考。 现在的问题是将下面的导航栏做出来,但是在自己做的时候 遇到的问题 在app.json文件中输入tarBar,就会生成模板代码,默认会生成一个list的模…

【面试题】calc()计算函数的作用和理解

前言 最近项目中遇到calc()方法不生效问题,本着究其所以然的想法,彻底查了一下calc的方法及使用,还有为什么项目中使用不生效的问题,最后总结出此文,解决方法放在结尾了 cale()是什么 calc是英文单词calculate的缩写…

低功耗技术——流水线设计(加法器和乘法器)

文章目录前言一、流水线1、16bit加法器2、无符号4bit乘法器3、编写一个4bit乘法器模块,并例化该乘法器求解c12*a5*b二、降低FPGA功耗1、静态功耗2、动态功耗前言 2023.3.31 今天学习降低功耗的一些方法 一、流水线 电路最高工作频率:取决于最长的组合逻…

高扇出的危害及优化

高扇出有哪些危害? 危害1:驱动能力下降,时序紧张 扇出过高也就是也就意味了负载电容过大,电路原理基础告诉咱们,负载电容越大,充放电速度越慢,电平跳变所需要的时间增加,即驱动能力…

「SAP ABAP」OPEN SQL(八)【WHERE语句大全】

💂作者简介: THUNDER王,一名热爱财税和SAP ABAP编程以及热爱分享的博主。目前于江西师范大学本科在读,同时任汉硕云(广东)科技有限公司ABAP开发顾问。在学习工作中,我通常使用偏后端的开发语言A…

MySQL主从复制、读写分离(MayCat2)实现数据同步

文章目录1.MySQL主从复制原理。2.实现MySQL主从复制(一主两从)。3.基于MySQL一主两从配置,完成MySQL读写分离配置。(MyCat2)1.MySQL主从复制原理。 MySQL主从复制是一个异步的复制过程,底层是基于Mysql数据…

AI编程助手 Kodezi : 记录、分享一个 VS code 插件

目录0. 概述1. 安装 / 功能介绍1.1 安装1.2 功能介绍1.2.1 Debug1.2.2 代码优化1.2.3 代码转换1.2.4 逐行注释1.2.5 多行注释1.2.6 生成文档1.2.7 生成代码2. KodeziChat 聊天机器人2.1 聊天机器人功能介绍2.2 如何使用 KodeziChat ?3. Kodezi 版本介绍3.1 免费版3.…

【2023年第十一届泰迪杯数据挖掘挑战赛】C题:泰迪内推平台招聘与求职双向推荐系统构建 建模及python代码详解 问题三

相关链接 【2023年第十一届泰迪杯数据挖掘挑战赛】C题泰迪内推平台招聘与求职双向推荐系统构建 建模及python代码详解 问题一 【2023年第十一届泰迪杯数据挖掘挑战赛】C题泰迪内推平台招聘与求职双向推荐系统构建 建模及python代码详解 问题二 【2023年第十一届泰迪杯数据挖…