当前位置: 首页 > news >正文

第一百四十七回 自定义组件一

文章目录

  • 概念介绍
  • 实现方法
  • 示例代码

我们在上一章回中介绍了跟手指移动的小球相关的内容,本章回中将介绍 自定义组件.闲话休提,让我们一起Talk Flutter吧。

概念介绍

在项目中有些内容无法通过现有的组件来实现,因此需要自定义组件,自定义组件通常分为两大类:

  • 组合已经有的组件形成新的组件;
  • 重新绘制组件;

组合已经有的组件我们没有专门介绍过,不过有类似的内容,比如前面章回中实现的阴影就可以看作是通过组合已经有的组件形成新的组件,它组合了TextBoxShadow组件,形成了带阴影的文字组件。我们在本章回中主要介绍的是重新绘制组件。

实现方法

重新绘制组件需要使用两个组件:CustomPaint组件和CustomPainter组件,因此我们首先介绍一下这两个组件:

  • CustomPainte组件相当于是一个画布,它主要用来创建画布,它提供了size属性来控制画布的大小;
  • CustomPainter组件相当于画笔,组件中需要的内容主要通过它来实现,它是一个抽象类,我们需要实现它的Paint()方法,所有绘制的内容都是在这个方法中完成的。
  • 绘制组件时创建画笔对象,并且把它赋值给画布的painter属性,这样就把画笔和画布关联在了一起。

示例代码

CustomPaint(painter: RockerPainter(outerRadius,Colors.blue),size: Size(100,100),
),class RockerPainter extends CustomPainter{///offset表示圆的圆心与(0,0)的偏移距离,其值等于半径final Color _color;final double radius = size;Offset _offset = Offset.zero;RockerPainter( this.radius,this._color);///参数中的size就是包含类的CustomPaint中指定的sizevoid paint(Canvas canvas,Size size) {Paint paint = Paint()..color = _color..strokeCap = StrokeCap.round..isAntiAlias = true..strokeWidth = 2.0;///圆的半径由参数指定_offset = Offset(radius, radius);///画圆:第一个参数指定Offset,表示圆的左上角为基准进行偏移而不是以圆心为基准canvas.drawCircle(_offset,radius,paint);}bool shouldRepaint(covariant CustomPainter oldDelegate) {// TODO: implement shouldRepaintreturn true;}
}

我们在上面的示例代码中,自定义了个圆形,圆形的大小和颜色可以通过参数指定。该代码中结合了综合使用了CustomPaint组件和CustomPainter组件。

编译并且运行上面的程序,可以看到一个半径为100的蓝色圆形,我在这里就演示程序的运行结果了,建议大家自己动手去实践。

看官们,与"自定义组件"相关的内容就介绍到这里,欢迎大家在评论区交流与讨论!

相关文章:

第一百四十七回 自定义组件一

文章目录 概念介绍实现方法示例代码 我们在上一章回中介绍了跟手指移动的小球相关的内容,本章回中将介绍 自定义组件.闲话休提,让我们一起Talk Flutter吧。 概念介绍 在项目中有些内容无法通过现有的组件来实现,因此需要自定义组件&#xf…...

MySQL 重复数据的处理

文章目录 MySQL 重复数据的处理一,常用处理方法二,统计重复数据三,过滤重复数据四,删除重复数据拓展:MySQL预防SQL注入(一)SQL注入 概述(二)预防措施 MySQL 重复数据的处…...

Java文字描边效果实现

效果: FontUtil工具类的完整代码如下: 其中实现描边效果的函数为:generateAdaptiveStrokeFontImage() package com.ncarzone.data.contentcenter.biz.img.util;import org.springframework.core.io.ClassPathResource; import org.springfr…...

【Web_环境搭建_Python3_pip】pip的升级、安装、更新、卸载,以及pipupgrade和pip-review的基础使用

** 官方说明 ** pip(Python Package Index)是一个以 Python 语言写成的软件包管理系統,使用 pip 可以非常方便的安装和管理 python 软件包PIP ** 查看信息 ** 查看版本 : pip --version查看已有 : pip list、pip freeze查看帮助 : pip help查看库信息 : pip show -f package_…...

农民朋友有福利啦!建行江门市分行“裕农通+农资结算”平台正式上线

随着广东广圣农业发展有限公司办公室内的裕农通“智慧眼”结算机“叮”的一声到账提醒,标志着全国首个“裕农通农资结算“平台的成功上线,也标志着建行广东省江门市分行的裕农通业务又迈上了一个新的台阶。 广东广圣农业发展有限公司(以下简…...

super详解

父类 package com.mypackage.oop.demo06;public class Person06{public Person06() {System.out.println("Person06无参执行了");}protected String name "hexioahei";public void print(){System.out.println("Person");} }子类 package com…...

GMS地下水数值模拟丨GMS各模块、三维地质模型构建及与MODFLOW耦合、地下水流动数值模拟及报告编制、地下水溶质运移模型、反应性溶质运移等

目录 第一部分 地下水数值模拟理论模块 第二部分 地下水数值模拟数据收集、准备及预处理 第三部分 GMS各模块实践 第四部分 三维地质模型构建及与MODFLOW耦合 第五部分 地下水流动数值模拟及报告编制 第六部分 地下水溶质运移模型 第七部分 反应性溶质运移 更多应用 以…...

Redis 配置文件详解 - 持久化(RDB、AOF)

目录 Redis 配置文件详解 单位 包含 INCLUDES 网络 NETWORK 通用 GENERAL 快照 SNAPSHOTTING (持久化) 复制 REPLICATION(主从复制) 安全 SECURITY(账号密码设置) ​编辑 限制 CLIENTS 追加模…...

在线Excel转JSON工具

在线Excel转JSON工具 上传excel将数据转换成json格式...

Spring编程常见错误50例-Spring Bean依赖注入常见错误(下)

Value没有注入预期的值 问题 对于Value可以装配多种类型的数据: 装配对象: Value("#{student}") private Student student;Bean public Student student(){Student student createStudent(1, "xie");return student; }装配字符…...

SpringBoot整合Canal实现MySQL与ES数据同步

文章目录 SpringBoot项目引入Canal依赖配置文件项目结构设置监听类其余类、接口内容启动类实体类Controller类Mapper接口Serice接口 运行测试 开始之前请确认docker中已运行mysql与canal容器,并完成了监听binlog配置 未完成可移步: Docker部署Canal监听…...

Zookeeper 源码分析流程

文章目录 前言Zookeeper启动加载磁盘数据与客户端的通信交互Leader选举准备节点状态处理总结 前言 Zookeeper 作为分布式协调服务为分布式系统提供了一些基础服务,如:命名服务、配置管理、同步等,使得开发者可以更加轻松地处理分布式问题。 …...

计数排序与基数排序

计数排序与基数排序 计数排序 计数排序:使用一个数组记录序列中每一个数字出现的次数,将该数组的下标作为实际数据,元素的值作为数据出现的次数。例如对于序列[3,0,1,1,3,3,0,2],统计的结果为: 0出现的次数&#xf…...

Mysql—表操作

目录 1、linux中数据库表名区分大小写,windows不区分2、创建数据库表3、外键4、查看数据表结构5、修改表5.1、修改表名5.2、添加字段5.3、指定位置添加字段5.4、修改字段名称5.5、修改字段类型5.6、修改字段位置5.7、删除字段5.8、修改表存储引擎5.9、删除外键 1、l…...

SpringCloud——微服务

微服务技术栈 在之前的开发过程中,我们将所有的服务都部署在一台服务器中,当我们的服务开始越来越多,业务越来越复杂,当一台服务器不能承担我们的业务的时候,就需要将不同的业务分开部署在不同的服务器上,…...

深入理解Java单例模式和优化多线程任务处理

目录 饿汉模式懒汉模式单线程版多线程版双重检查锁定 阻塞队列 单例模式能保证某个类在程序中只存在唯一一份实例, 而不会创建出多个实例,并提供一个全局访问点。 饿汉模式 类加载的同时,创建实例。 class Singleton {private static final Singlet…...

已解决 Kotlin Error: Type mismatch: inferred type is String but Int was expected

🌷🍁 博主猫头虎(🐅🐾)带您 Go to New World✨🍁 🦄 博客首页: 🐅🐾猫头虎的博客🎐《面试题大全专栏》 🦕 文章图文并茂&#x1f996…...

Web应用系统的小安全漏洞及相应的攻击方式

写作目的 本文讲述一个简单的利用WebAPI来进行一次基本没有破坏力的“黑客”行为。 主要目的如下: 了解什么叫安全漏洞 知道什么是api 了解一些获取api的工具 通过对API的认识了解白盒接口测试基本概念和技术 免责声明: 本文主要是以学习交流为目的&a…...

git工具下载和安装

(1)从git官网下载安装包 然后安装 https://git-scm.com/downloads (2)git 学习参考官方的资料 https://git-scm.com/book/en/v2...

腾讯mini项目-【指标监控服务重构】2023-08-04

今日已办 关于 span-references 的调研 https://github.com/DataDog/dd-trace-js/issues/1761 https://github.com/open-telemetry/opentelemetry-specification/blob/874a451e7f6ac7fc54423ee3f03e5394197be35b/specification/compatibility/opentracing.md#span-references h…...

怎么推广自己抖店的商品?最适合0经验新手操作的办法,来看看

我是王路飞。 抖店开通后,想要把自己店铺的商品卖出去,就需要进行推广了。 但是怎么推广呢? 要么利用抖音的搜索和推荐流量,获取曝光,实现点击和转化。 不过这种玩法有个弊端,就是需要你有一定的电商经…...

线性代数的本质(三)——线性方程组

文章目录 线性方程组高斯消元法初等行变换线性方程组的解向量方程齐次线性方程组的解非齐次线性方程组的解 线性方程组 高斯消元法 客观世界最简单的数量关系是均匀变化的关系。在均匀变化问题中,列出的方程组是一次方程组,我们称之为线性方程组(Linea…...

轻量级性能测试工具 wrk 如何使用?

项目设计之初或者是项目快要结束的时候,大佬就会问我们,这个服务性能测试的结果是什么,QPS 可以达到多少,RPS 又能达到多少?接口性能可以满足未来生产环境的实际情况吗?有没有自己测试过自己接口的吞吐量&a…...

WebGL 视图矩阵、模型视图矩阵

目录 立方体由三角形构成 视点和视线 视点、观察目标点和上方向 视点: 观察目标点: 上方向: 在WebGL中,观察者的默认状态应该是这样的: 视图矩阵程序(LookAtTriangles.js) 实际上&…...

Python 3 – 文件 readline() 方法

Python 3 – 文件 readline() 方法|极客笔记 # 打开文件 file open("example.txt", "r")# 读取文件中的一行数据 line file.readline() while line:# 移除行尾的换行符print(line.strip())# 读取文件中的下一行数据line file.readline()# 关闭文件 file…...

如何在微软Edge浏览器上一键观看高清视频?

编者按:视频是当下最流行的媒体形式之一。但由于视频压缩、网络不稳定等原因,我们常常可以看到互联网上的很多视频其画面质量并不理想,尤其是在浏览器端,这极大地影响了观看体验。不过,近期微软 Edge 浏览器推出了一项…...

Telegram BoT的主流项目盘点

目录 DeFi 类 数据分析类 空投埋伏交易 其他 Telegram Bot赛道的发展趋势预测 Telegram BoT赛道发展较快,具体来看可以分为DeFi 类、数据分析类、空投埋伏交易类以及其他。 DeFi 类 Unibot(交易)、Banana Gun、WagieBot(交…...

PTA 甲级 1044 Shopping in Mars

题目链接 思路&#xff1a;前缀和滑动窗口 #include<bits/stdc.h> #define MAXN 100010 using namespace std; int a[MAXN];int main(){int n,m;cin>>n>>m;//n数量 m金额for(int i1;i<n;i){int t;cin>>t;a[i]a[i-1]t;//前缀和}vector<pair<in…...

Linux学习之MyCat实现分库分表

环境准备 先准备一套MySQL主从服务器&#xff0c;可参考MySQL主从配置配置MyCat服务 资源下载 网盘链接: https://pan.baidu.com/s/1cLTMH_e1-6loc_gF9ZNHTg?pwda63n 提取码: a63n MyCat配置 # 1&#xff09;安装mycat软件 //安装jdk [rootmycat58 upload]# yum -y insta…...

DirectX12(d3d12)初始化

一、前置要求 Windows 10及以上(安装有DirectX12)VisualStudio 2022 二、DirectX12入门 1.引用头文件 #include<Windows.h> #include<d3d12.h> #include<dxgi1_4.h>2.注册窗口类并初始化窗口 这里我们调用Windows API 通过应用程序的句柄来注册一个唯一…...

邢台哪儿做wap网站/成都专门做网络推广的公司

给出集合 [1,2,3,…,n]&#xff0c;其所有元素共有 n! 种排列。 按大小顺序列出所有排列情况&#xff0c;并一一标记&#xff0c;当 n 3 时, 所有排列如下&#xff1a; “123” “132” “213” “231” “312” “321” 给定 n 和 k&#xff0c;返回第 k 个排列。 示例 1&…...

wordpress调试主题/优化生育政策

一、题目描述 编写一个制造各种车辆的程序。包含三个类&#xff0c;具体要求如下&#xff1a; &#xff08;1&#xff09;基类Vehicle&#xff0c;包含轮子数和汽车自身重量两个属性,一个两参数的构造方法&#xff0c;一个显示汽车信息的方法&#xff1b; &#xff08;2&#…...

网站首页结构/linux网站入口

微信小程序可长按移动控件&#xff0c;供大家参考&#xff0c;具体内容如下–包含超出边界监测&#xff0c;性能不够理想【原因&#xff1a;setData在毫秒级刷新时会极大程度影响渲染性能】JavascriptPage({/*** 页面的初始数据*/data: {//浮动按钮坐标flow_y: 130,flow_x: 20,…...

凉山建设机械网站/百度服务中心人工客服电话

转自&#xff1a;https://zhuanlan.zhihu.com/p/24638007 &#xff08;详细&#xff0c;666耳东陈老师&#xff09; 字典 SVM&#xff08;Support Vector Machine&#xff09;&#xff0c;支持向量机 constraint&#xff0c;约束 阅读说明 希腊字母表见附录1&#xff08;数…...

江苏建设网站酒店装修合同范本/推广产品的文案

记得有这么一句广告词&#xff1a;“软件以用为主”。这句广告词的背后传达了时下人们对于软件的一种普遍的认识和价值取向&#xff1a;软件是而且仅是一种工具。不仅软件的普通用户或者高级用户&#xff0c;就算是软件供应商也对软件持这样一种价值观。功用或者功能似乎成了软…...

那家做网站好/上海公布最新情况

中兴路由器无中继的DHCP配置一、实验目的二、实验内容三、实验流程四、实验总结一、实验目的 掌握DHCP的基本原理和作用&#xff0c;及其DHCP的网络架构&#xff1b; 二、实验内容 1.完成路由器DHCP&#xff08;不含中继&#xff09;的基本配置和结果验证&#xff1b; 三、…...