(原创)Flutter基础入门:装饰器Decoration

news2025/3/10 10:55:51

前言

作为一个Android开发,最近打算把自己学的Flutter相关知识做个积累,所以这会是一个系列的博客。里面讲的都会是一些Flutter相关的知识,有基础的,也有比较深入的,由浅入深嘛。

那么今天作为开篇,就先讲讲Flutter中的装饰器:Decoration

在Android开发中,我们经常会对控件做一些样式的改变,比如背景色,shape,遮罩等等,Android有自己的一套实现方案,对应到Flutter,我们要实现这样类似的效果,就要用到Decoration这个类

Decoration作为一个接口,它是有很多的实现类的,具体如下:
在这里插入图片描述
比较常用的例如:BoxDecoration和ShapeDecoration,这篇文章都会讲到
那么Decoration是怎么用的呢?
可以看到我们的一些组件,比如Container组件、DecoratedBox组件,它们的构造方法里面有一个decoration属性,其实就是Decoration类,我们就可以通过配置我们自己的Decoration装饰,来完成组件的样式的配置,例如:

child: Container(
  width: 100,
  height: 100,
  alignment: Alignment.center,
  child: Text('Button'),
  decoration: BoxDecoration(
      borderRadius: BorderRadiusDirectional.circular(10),
      color: Colors.blue),
),

这样我们就实现了一个文字组件的圆角样式
在这里插入图片描述
下面我们具体讲一下它的实现类

Decoration的子类

BoxDecoration

BoxDecoration主要用来实现边框、圆角、阴影、形状、渐变、背景图像等装饰
可以看它的构造方法里面:

const BoxDecoration({
    this.color,//填充色
    this.image,//图片
    this.border,//描边
    this.borderRadius,//圆角
    this.boxShadow,//阴影
    this.gradient,//渐变
    this.backgroundBlendMode,//混合模式
    this.shape = BoxShape.rectangle,//样式:圆形还是长方形
  })

如果我们要实现Android中类似Shape的效果,用BoxDecoration就没错了

ShapeDecoration

ShapeDecoration和BoxDecoration类似,可以理解为精简版
看它的构造:

  const ShapeDecoration({
    this.color,
    this.image,
    this.gradient,
    this.shadows,
    required this.shape,
  })

可以看到有一个shape属性,这个属性比较特殊,它是一个ShapeBorder抽象类
ShapeBorder常用来实现各种描边的效果
在下一篇中我们讲Shape描边效果实现中也会提到

这个抽象类也有很多子类的实现,其实也是flutter提供给我们的一些已经定制好的shape样式:
在这里插入图片描述
比较常用的如:Border、CircleBorder、BoxBorder等
具体的可以参考这篇博客,它列举出了一些常用的效果:
Flutter shape类型组件

FlutterLogoDecoration

照例看它的构造方法:

  const FlutterLogoDecoration({
    this.textColor = const Color(0xFF757575),
    this.style = FlutterLogoStyle.markOnly,
    this.margin = EdgeInsets.zero,
  })

正常情况下基本没有用,这个就是flutter的logo。

UnderlineTabindicator

UnderlineTabindicator主要是给组件划线,默认是放到组件下面
所以可以实现简单的下划线功能
这边举个例子:

decoration: UnderlineTabIndicator(
    borderRadius:BorderRadius.circular(10), //下划线的圆角
    borderSide: BorderSide(color: Colors.blue, width: 3.0),//下划线颜色和宽度
    insets: EdgeInsets.fromLTRB(0, 0, 0, 5)),//下划线起始位置距离上下左右的距离,默认都是0,

这边特意说下insets这个属性
默认都是0,这时候默认位置就是在组件的左下方开始绘制
我这边设置bottom为5,意味着距离组件下方5个单位
如果组件高度为10的话,其实就是画了个中划线了
类似这种:
在这里插入图片描述

MagnifierDecoration

这个暂时还没用过,后面补充

自定义Decoration

我们也可以自己定义自己的装饰器
可以参考这篇博客
Flutter 自定义Decoration

结尾

关于Decoration大概就是这些内容,下一篇打算讲Flutter中如何实现Android中各种Shape的效果
链接如下:
Flutter基础入门:实现各种Shape效果

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

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

相关文章

经典回顾丨同为科技(TOWE)在2008年奥运场馆防雷建设中都做了什么?

针对大型体育赛事场馆防雷建设工作非常重要,这是因为大型体育赛事通常吸引了大量的观众和运动员聚集,一旦场馆遭受雷击,可能会造成严重的伤亡和财产损失。如今,大型体育赛事的场馆都会配备防雷设施,如建筑物避雷针、接…

代理设计模式解读

目录 代理模式的基本介绍 静态代理 静态代码模式的基本介绍 应用实例 思路分析图解(类图) 代码实战 静态代理优缺点 动态代理 动态代理模式的基本介绍 JDK 中生成代理对象的 API 代码实战 Cglib 代理 Cglib 代理模式的基本介绍 Cglib 代理模式实现步骤 Cglib 代理模…

同为科技(TOWE)机柜PDU电源插头类型详解

机柜PDU电源插座作为机房服务器众多设备运行的“最后一米”也是最为密切的电源配件,专用于精细保护单相交流供电的敏感设备,其品质好坏直接影响到各个设备的正常运行。机柜PDU电源管理器是由插头、线缆、主体三个部分组成,其中电源插头可以分…

leetcode24. 两两交换链表中的节点

给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。 示例 1: 输入:head [1,2,3,4] 输出:[2,1…

什么是机器学习?

目录 简介 机器学习可以做什么 机器学习未来的趋势 总结 简介 机器学习是一种人工智能领域中的技术,其主要目的是让计算机能够自动进行模式识别、数据分析和预测。 机器学习的起源可以追溯到20世纪50年代,当时美国的Arthur Samuel在一篇论文中提出了相关…

(转)使用Midjourney进行图生图

原文链接:使用Midjourney进行AI绘画的基础手册-虎课网 接下来,我们讲一下,如果使用Midjourney的垫图功能,创作相同风格的图片 第一步: 1、打开discord,查看自己的服务器 2、我们双击“+”,来上传图片,图片上传后,按下enter发送图片; 图片发送成功后,点击图片放大…

不得不说的创建型模式-单例模式

单例模式是创建型模式的一种,它的作用是确保一个类只有一个实例,并提供全局访问点。单例模式通常用于管理共享资源,如配置文件、数据库连接池等,它可以保证这些资源只被创建一次,并且可以被全局共享。 下面是一个使用C…

AI 智能会有自主意识吗?会不会伤害人?

随着科技的高速发展,人工智能已逐渐融入我们的日常生活。从智能家居设备到自动驾驶汽车,人工智能的应用领域越来越广泛。然而,在这个趋势背后,我们面临着一个极具争议的问题:人工智能是否会觉醒自我意识?我…

程序员阿里三面无理由挂了,被HR一句话噎死,网友:这可是阿里啊

进入互联网大厂一般都是“过五关斩六将”,难度堪比西天取经,但当你真正面对这些大厂的面试时,有时候又会被其中的神操作弄的很是蒙圈。 近日,某位程序员发帖称,自己去阿里面试,三面都过了,却被…

近期遇到的vscode 插件开发的问题,when表达式,正则匹配路径

前言 最近在修改dbt插件的时候,遇到了几个比较奇怪的问题,猜测应该是因为跟新了VSCode导致的。 这里稍微记录一下,如果能帮助其他的同学,那就太值啦。 when 正则表达式 之前有在packgae.json 中使用 when 的正则表达式&#xf…

文章修改润色软件-中文文章自动润色

在今天这个信息爆炸的时代,写作已经成为了生活和工作中不可或缺的一部分。无论是企业宣传材料、项目报告、还是日常沟通,我们都需要写作来表达自己的意见和观点。但是,对于大多数人来说,写作带来的不仅仅是创作的乐趣,…

Nacos 1.4.x 升级至 2.x 详细步骤及遇到的问题

此前使用的nacos版本是1.4.5,现在nacos最新版本为2.2.2,且修复了旧版本的一些安全问题,下面把详细的升级步骤记录一下,大家一起学习。主要参照了nacos官方升级文档:https://nacos.io/zh-cn/docs/v2/upgrading/2.0.0-up…

MongoDB 分片集群架构中的分片策略

一、分片集群架构 1-1、分片简介 分片(shard)是指在将数据进行水平切分之后,将其存储到多个不同的服务器节点上的一种扩展方式。分片在概念上非常类似于应用开发中的“水平分表”。不同的点在于,MongoDB本身就自带了分片管理的能…

【Linux】基于单例模式懒汉实现方式的线程池

目录 一、LockGuard.hpp 二、Task.hpp 三、Thread.hpp 四、ThreadPool.hpp 一、LockGuard.hpp #pragma once #include <iostream> #include <pthread.h> class Mutex//锁的对象 { public:Mutex(pthread_mutex_t* lock_pnullptr):_lock_p(lock_p){}~Mutex(){}v…

设计模式-看懂UML类图和时序图

这里不会将UML的各种元素都提到&#xff0c;只讲类图中各个类之间的关系&#xff1b; 能看懂类图中各个类之间的线条、箭头代表什么意思后&#xff0c;也就足够应对 日常的工作和交流&#xff1b; 同时&#xff0c;应该能将类图所表达的含义和最终的代码对应起来&#xff1b;1.…

Qt音视频开发39-海康sdk回调拿到数据GPU绘制的实现

一、前言 采用海康的sdk做开发&#xff0c;最简单最容易的方式就是传入句柄&#xff08;windows和linux都支持/很多人以为只有windows才支持&#xff09;即可&#xff0c;这种方式不用自己处理绘制&#xff0c;全部交给了sdk去处理&#xff0c;所以cpu的占用是最低的&#xff…

ERTEC200P-2 PROFINET设备完全开发手册(8-1)

8.1 IRT通讯实验 这里我们使用APP3 IsoApp&#xff0c;修改源代码usrapp_cfg.h的宏为 #define EXAMPL_DEV_CONFIG_VERSION 3 使能App3&#xff0c;对应的主程序为“usriod_main_isoapp.c” 编译后下载运行。打开4.2建立的TIA项目&#xff0c;添加等时模式组织块&#xff0c…

SAS学习第3章:试验数据处理的心决

sas中数据的输入格式一般分为2种&#xff0c;一种是直接输入&#xff0c;另一种是循环输入。input 后跟几个变量名&#xff0c;数据卡cards就要据此逐次处理&#xff0c;且一定是倍数关系。 1.直接输入在自变量及数据较少的情况下较好使用。 例&#xff1a; 甲、乙、丙三个奶…

代码随想录_二叉树_leetcode105 106

leetcode105. 从前序与中序遍历序列构造二叉树 105. 从前序与中序遍历序列构造二叉树 给定两个整数数组 preorder 和 inorder &#xff0c;其中 preorder 是二叉树的先序遍历&#xff0c; inorder 是同一棵树的中序遍历&#xff0c;请构造二叉树并返回其根节点。 示例 1: 输入…

android sdl编译

SDL&#xff08;Simple DirectMedia Layer&#xff09;是一套开放源代码的跨平台多媒体开发库&#xff0c;使用C语言写成。SDL提供了数种控制图像、声音、输出入的函数&#xff0c;让开发者只要用相同或是相似的代码就可以开发出跨多个平台。 1 下载SDL源码 http://www.libsd…