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

【Flutter学习笔记】10.1 自定义组件方法简介

参考资料:《Flutter实战·第二版》 10.1 自定义组件方法简介


Flutter所提供的组件外观和功能有限,经常无法满足我们的需求,或者是我们需要封装复用一些组件时,就需要编写自定义组件。Flutter中自定义组件共有3种方法:组合其它组件自绘实现RenderObject

10.1.1 组合多个Widget

这种方法是通过组合多个组件成一个新的组件,是较为常见的自定义组件方法。例如Container就是一个组合组件,其由DecoratedBoxConstrainedBoxTransformPaddingAlign等组件组成。我们在开发的过程中,也是通过组合组件来实现的布局。

10.1.2 通过CustomPaint自绘

如果遇到无法通过现有组件来实现需要的UI时,需要通过自绘组件的方式实现。Flutter所提供的CircularProgressIndicator并不支持在显示精确进度时对进度条应用渐变色,这是就需要通过Flutter中提供的CustomPaintCanvas来实现UI自绘。

10.1.3 通过RenderObject自绘

Flutter提供的自身具有UI外观的组件,如文本TextImage都是通过相应的RenderObject渲染出来的,如Text是由RenderParagraph渲染;而Image是由RenderImage渲染。RenderObject是一个抽象类,它定义了一个抽象方法paint(...)

void paint(PaintingContext context, Offset offset)

其中,PaintingContext是组件的绘制上下文,通过PaintingContext.canvas可获得Canvas对象,绘制逻辑是通过Canvas中的API实现的。子类需要重写这个方法来实现绘制逻辑,例如RenderParagraph需要实现文本绘制逻辑,而RenderImage需要实现图片绘制逻辑。
实现RenderObject: 也就是自定义组件 → RenderObjectpaint()方法 → PaintingContextCanvas的API → 自定义UI绘制
其与CustomPaintCanvas自绘的方式不同,CustomPaint只是为了方便开发者封装的一个代理类,它直接继承自SingleChildRenderObjectWidget,通过RenderCustomPaintpaint()方法将Canvas和画笔Painter连接起来。

相关文章:

  • nginx相关内容的安装
  • 【UE5】动画蒙太奇简述
  • python共享单车信息系统的设计与实现flask-django-php-nodejs
  • 【爬虫】web自动化和接口自动化
  • [嵌入式系统-39]:龙芯1B 开发学习套件 -9-PMON的文件结构
  • 大模型主流微调训练方法总结 LoRA、Adapter、Prefix-tuning、P-tuning、Prompt-tuning 并训练自己的数据集
  • 代码+视频,R语言使用BOOT重抽样获取cox回归方程C-index(C指数)可信区间
  • 贝尔曼方程【Bellman Equation】
  • 使用 ZipArchiveInputStream 读取压缩包内文件总数
  • RuoYi-Vue开源项目2-前端登录验证码生成过程分析
  • 记录一次服务器内存使用率过高达到90%告警问题排查。
  • 基于SpringBoot的高校办公室行政事务管理系统
  • 本地虚拟机平台Proxmox VE结合Cpolar内网穿透实现公网远程访问
  • PHP8编译安装
  • C++ map字典
  • 文本处理基本方法
  • 家具工厂5G智能制造数字孪生可视化平台,推进家具行业数字化转型
  • MySQL索引、事务、储存引擎
  • Python 常用内置函数详解(二):print()函数----打印输出
  • 【xr806开发板使用】连接wifi例程实现
  • 巴基斯坦外长:近期军事回应是自卫措施
  • 长江画派创始人之一、美术家鲁慕迅逝世,享年98岁
  • 早期投资人蜂巧资本清仓泡泡玛特套现超22亿港元,称基金即将到期
  • 上海交大:关注到对教师邵某的网络举报,已成立专班开展调查
  • 75岁亚当·费舍尔坐镇,再现80分钟马勒《第九交响曲》
  • 外交部:解放军参加红场阅兵体现了中方对历史的尊重和铭记