flutter组件封装技巧

Flutter Dio二次封装 在这里我和身边一些朋友特意整理了一份快速进阶为Android高级工程师的系统且全面的学习资料。涵盖了Android初级——Android高级架构师进阶必备的一些学习技能。附上:我们之前因为秋招收集的二十套一二线互联网公司Android面试真题(含BAT、小米、华为、美团、滴滴)和我自己整理Android复习笔记(包含Android基础知识点、Android扩展知识点、Android源码解析、设计模式汇总、Gradle知识点、常见算法题汇总。 阅读详情

这段代码是一个用于创建一个(GradeTag)组件的类。这个组件可以根据输入的年级和颜色创建一个具有不同颜色和百分比显示的标签。

实现原理:

  1. 使用GradeTag.origin构造函数来创建一个包含默认颜色和百分比的字符串。这个构造函数使用了assert来确保输入的年级在特定的集合中('SSR', 'SR', 'S', '普通')。
  2. 使用GradeTag工厂方法来创建不同级别的GradeTag。通过传入不同的颜色参数,可以实现不同级别的标签具有不同的颜色。
  3. 在build方法中,使用Row组件来创建标签的布局。通过设置Container的边框圆角半径为6.0,可以实现标签具有圆角边框。
  4. 使用Text组件来显示年级和百分比。通过设置字体样式和颜色,可以实现不同的字体样式和颜色显示。

用途:

这个组件可以用于展示不同级别的成绩标签,例如SSR(高级)、SR(中级)和S(初级)等。同时,可以通过传入不同的颜色参数来定制标签的颜色。

注意事项:

  1. 确保在调用GradeTag.origin构造函数时,传入的年级在特定的集合中。否则,将会抛出异常。
  2. 在使用GradeTag工厂方法时,可以传入Key和Color参数,但不是必需的。如果未传入,将使用默认值。
  3. 在build方法中,使用了const关键字来定义EdgeInsets和BorderRadius,这意味着这些值在组件加载时只计算一次,从而提高性能。
  4. 使用if条件语句来判断是否显示百分比。这样可以控制只有当百分比参数不为空时才显示百分比。
class GradeTag extends StatelessWidget {
  final String grade;
  final Color? color;
  final String? num;

  const GradeTag.origin(this.grade,
      {super.key, this.color, this.num = ''})
      : assert(
            grade == 'SSR' || grade == 'SR' || grade == 'S' || grade == '普通');

  factory GradeTag(String grade,
      {Key? key, Color color = Colors.grey, String number = ''}) {
    switch (grade) {
      case 'SSR':
        return GradeTag.origin(grade, color: Colors.red, num: number);
      case 'SR':
        return GradeTag.origin(grade, color: Colors.orange, num: number);
      case 'S':
        return GradeTag.origin(grade, color: Colors.orange, num: number);
      case '普通':
        return GradeTag.origin(grade, color: Colors.grey, num: number);
      default:
        return GradeTag.origin(grade, color: color, num: number);
    }
  }

  @override
  Widget build(BuildContext context) {
    return Row(
      children: [
        Container(
          padding: const EdgeInsets.symmetric(vertical: 0, horizontal: 6),
          decoration: BoxDecoration(
              color: color, borderRadius: BorderRadius.circular(6.0)),
          child: Text(
            grade,
            style: const TextStyle(
                fontWeight: FontWeight.bold,
                fontSize: 18.0,
                color: Colors.white),
          ),
        ),
        if (num != '')
          Padding(
            padding: const EdgeInsets.only(left: 8.0),
            child: Text('$num%'),
          )
      ],
    );
  }
}

构造函数和工厂方法是两种不同的对象创建模式,在面向对象编程中广泛使用,它们之间有以下异同:

相同之处:

  1. 目的:两者都用于创建对象实例。

不同之处:

构造函数(Constructor)
  • 定义:构造函数是一种特殊的方法,与类关联,当通过 new 关键字创建类的新实例时自动调用。
  • 特点:
    • 名称与类名相同。
    • 构造函数可以有参数,用来初始化对象的状态。
    • JavaScript 中构造函数通常首字母大写,这是一种约定俗成的做法,便于区分普通函数。
    • 使用 new 关键字调用时,会创建一个新的对象,并将该对象的上下文(即 this)绑定到新创建的对象上。
工厂方法(Factory Method)
  • 定义:工厂方法是一种设计模式,它是一种用于创建对象的接口,让子类决定实例化哪一个类。这里的解释主要针对广义上的工厂模式,包括简单工厂、工厂方法模式、抽象工厂模式等。
  • 特点:
    • 是一个独立的函数或类方法,不局限于类内部。
    • 根据传入的参数或其他逻辑,动态决定创建哪种类型的对象。
    • 工厂方法可以隐藏对象的具体创建过程,提供了更大的灵活性,可以返回父类引用指向子类对象,实现多态。
    • 在JavaScript中,工厂函数通常不会被new关键字调用,而是直接调用函数并返回新创建的对象。
    • 工厂函数不会自动调用,需要手动调用

具体到JavaScript中:

  • 构造函数举例:

    function Animal(type) {
      this.type = type;
    }
    var cat = new Animal('cat');
  • 工厂函数举例:

    function createAnimal(type) {
      let animal;
      switch (type) {
        case 'cat':
          animal = Object.create(Cat.prototype);
          animal.initialize(); // 初始化Cat对象
          break;
        case 'dog':
          animal = new Dog(); // 或者直接创建Dog对象
          break;
        default:
          animal = null;
      }
      return animal;
    }
    var myCat = createAnimal('cat');

总结来说,构造函数是类的一部分,负责初始化类的实例,而工厂方法是一种更灵活的设计模式,但与构造函数不同,它不返回一个新对象,而是返回一个已经存在的对象。工厂函数不会自动调用,需要手动调用。允许你根据输入数据或环境条件创建不同类型的对象,它并不强制与类结构直接绑定。在JavaScript中,有时工厂函数也被用来模拟类似构造函数的行为,特别是当需要控制是否总是返回新对象,或者避免不小心忘记使用new关键字时。在构造函数中,this关键字引用当前创建的对象;在工厂函数中,this关键字引用的是函数的调用者。

Flutter实战小项目(3)—-UI界面控件的封装 上 我们看开始的图片知道,我们这是一个底部导航栏。由于Flutter代码的嵌套性比较繁乱,冗杂。所以我们就把每个界面的ListView显示的每个item数据都进行封装。 首页控件的封装: import 'package:flutter/material.dart'; import 'package:flutter_app_pneumonia/api/news_model.dart'; import 'package:flutter_app_pneumonia/commom/check.dart'; import 'package:flutter_app_pneumonia/commom/date. 立即下载

相关推荐

张正友标定法-MATLAB实验

该方法最早由微软研究院的Zhengyou Zhang教授提出,1998年发表在IEEE TRANSACTIONS ON PATTERNANALYSIS AND MACHINE INTELLIGENCE,论文题目为:AFlexible New Technique for Camera Calibration。 (一)标定平面到图像平面的单应性 单应性(homography):在计算机视觉中被定义

qq_37845624的博客 8288

学习封装Flutter组件,看这篇就够了

本文将按步就章地指导有意学习flutter框架的开发者,如何进行自定义组件的封装。封装自定义组件前,应该先了解和掌握什么前提知识或技术,都会文章中进行指导。

御承扬的博客 2432

Verilog除法器(32位无符号+带符号)

32位无符号除法器设计 恢复余数法: 恢复余数除法的基本思路是从“部分余数”中减去除数,如果结果为负(不够减),则恢复原来的部分余数,商0. 寄存器使用: reg_r 存放被除数a reg_b 存放除数b reg_r 存放余数(初始清零) 具体做法: 做减法时,减数是reg_b中的除数,被减数是reg_r中的余数左移一位,最低位由reg_q(被除数)的最高位补充。为了能够判断相减结果的正...

qq_38600065的博客 1万+

Flutter 极简 Dio 组件二次封装文档

本文档介绍了如何通过二次封装 Flutter Dio 组件来简化网络请求的过程。通过封装,我们可以提高代码复用性,简化调用方式,并添加一些常用的功能,使网络请求更加易于管理和维护。通过对 Flutter Dio 组件进行二次封装,我们可以提高代码的复用性和可维护性,简化网络请求的调用过程。在封装过程中,我们可以添加拦截器、处理错误等功能,使网络请求更加灵活和可靠。希望本文档能够帮助你了解如何二次封装 Flutter Dio 组件,并在实际项目中应用。

半身风雪 4592

Superpowers:可编程AI协作协议与Skill工程化实践

AI编程正从提示词驱动迈向工程化协作新范式。Superpowers并非传统代码补全工具,而是一套定义清晰、可版本控制、可调试复用的AI协作协议——它将AI能力抽象为带输入校验、执行管道、输出契约和元数据声明的Skill(类DSL构件),再通过状态驱动的Workflow编排实现跨平台、可熔断、含人工Checkpoint的自动化流水线。其核心价值在于解决AI生成代码长期存在的不可复现、不可审计、不可交接三大痛点,支撑OpenAPI转TS、Figma转Vue等高复用场景落地。本文深入解析Skill设计四重契约与P

weixin_31124163的博客 376

MCNP 减方差技巧(最全)

MCNP的减方差技巧,核心在于不显著增加计算时间的前提下,通过修改模拟过程来降低结果的统计误差。尤其适用于,这类问题中粒子很难到达探测器区域,直接模拟效率极低栅元重要性是常用的减方差技巧,该方法主要对计算模型的不同区域定义不同的重要性数值。当粒子从重要性低的区域废物重要性高的区域,产生更多粒子,增大统计量;当从重要性高的区域进入重要性低的区域,会进行,增快计算效率。n= 中子,N;光子,P;电子 Exi= 栅元i的重要性I=栅元总数项目IMP卡是必须的,除非使用了WWN卡如果粒子进入0。

chencheng1127的博客 925

flutter 封装组件(1)

前言:先封装几个组件,provider相关的知识后续更新 1.Flutter AppBar 封装 (1)首先我们要找到源码里面AppBar实现的类 (2)开始封装(属性以备注好了) import 'package:flutter/material.dart'; import 'package:bourse/constant/i_colors.dart'; import 'package:bourse/utils/general_util.dart'; import 'package:bours

ZhangWes的博客 2827

2017年全国大学生电子设计竞赛综合测评题目解析——Multisim仿真

1.题目 给定两个单电源的双运放芯片READ2302G芯片(当时记得增益带宽积好像是6M),一片HD74LS74数字芯片双D触发器,需要详细电路图、手写报告,5个波形输出,测频,测幅,8:00公布题目,15:00停止答题,中间可以吃饭(也可以不吃继续做),15:00清场,休息一段时间后开始进场测试,打分。 2.要求 (1)一片运放搭建方波振荡电路,频率 20 KHz,误差 0.1 KHz,幅度 3...

DengFengLai123的博客 2万+

Flutter艺术探索-Flutter自定义组件:组合与封装技巧

当你需要实现一个性能极致或样式特殊的UI时(比如一个动态图表),可以绕过Widget层,直接使用或继承进行绘制。/// 通过自定义RenderObject实现的进度环组件Key?key,@override@override// 当属性变化时,只更新RenderObject的对应属性,并触发重绘/// 自定义的RenderObject,负责具体的布局和绘制逻辑// setter方法会在属性变化时标记需要重绘或重新布局= value) {

nanxuan521的专栏 401

Transformer实战(32)——Transformer模型压缩

在本节中,我们学习了如何在硬件资源受限的情况下减轻运行大模型的负担。我们介绍了如何通过蒸馏、剪枝和量化从训练好的模型中提取高效模型。预训练轻量级的通用语言模型(如 DistilBERT) 可以在各种任务上进行微调,并表现出与非蒸馏模型相当的性能。随着数据量的不断增加,我们希望模型能够更快地运行,在这方面,高效 Transformer 起着至关重要的作用。

盼小辉丶的博客 2541

ROS机器人未知环境自主探索功能包explore_lite最全源码详细解析(一)

本系列文章主要针对ROS机器人常使用的未知环境自主探索功能包explore_lite展开全源码的详细解析,并进行概括总结。 本系列文章共包含六篇文章,前五篇文章主要介绍explore_lite功能包中 explore.cpp、costmap_tools.h、frontier_search.cpp、costmap_client.cpp等源码实现文件中全部函数的详细介绍,第六篇文章进行概括总结,包含自主探索功能包explore_lite的简介,实现未知环境自主探索功能的原理及流程总结,效果演示,使用功能包

慕羽★的博客 3936

Flutter弹窗组件终极指南:AlertDialog与自定义弹窗封装技巧

想要快速掌握Flutter弹窗开发?这份完整指南将带你深入了解AlertDialog与自定义弹窗的封装技巧,让你的应用交互体验更上一层楼!🦌 Flutter Deer项目提供了丰富的弹窗组件实现,包括基础对话框、进度弹窗、确认弹窗等,这些组件都经过精心设计和封装,可以直接在你的项目中复用。 ## 🔥 为什么需要自定义弹窗组件? 在Flutter开发中,虽然系统提供了AlertDialog

gitblog_00524的博客 1023

60、新型共轴直升机建模与事件触发积分强化学习研究

本文研究了新型共轴直升机的动力学建模与控制方法,基于牛顿-欧拉方程建立了6自由度非线性模型,并设计了四通道闭环控制器实现稳定飞行。同时,提出一种事件触发积分强化学习方法,用于解决非零和博弈中的最优跟踪控制问题,在减少通信开销的同时保证系统性能。通过仿真验证了控制器的轨迹跟踪能力,并证明了算法下跟踪误差与神经网络权重估计误差的一致最终有界性。两种方法协同可提升飞行器的自主性与鲁棒性,未来可拓展至多智能体协作、智能交通等复杂系统应用。

rl6adventurer的博客 118

Flutter 视频详情头部模块组件封装与布局技巧

Flutter 视频详情头部模块组件封装与布局技巧

weixin_43800535的博客 299

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

Flutter动手实战,大佬手把手教你如何仿写出大厂的APP,Android开发必须要会

以下都是我在项目里使用的知识点,在这里记录分享出来,希望能帮到大家。

2401_87545724的博客 1263

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

Flutter 动画封装

AnimatedWidget AnimatedWidget对addListener和setState进行了封装,示例如下 import 'package:flutter/material.dart'; class AnimatedLogo extends AnimatedWidget {   // listenable类似之前写的addListener,此时可以监听a...

DLUT_WJX的博客 720

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Flutter 组件封装实战:从基础到业务的复用秘籍

本文系统介绍了Flutter组件封装的核心方法与实战技巧。通过表格对比形式,详细解析了封装原则(单一职责、最小暴露等)、组件分类选型策略,并给出通用按钮和表单输入框的极简代码示例。文章重点梳理了常见避坑点(过度封装、状态耦合等)和性能优化技巧(const优化、懒加载等),同时提供组件库沉淀、样式常量类等团队协作方案。最后强调封装验收标准是减少调用代码量、确保样式统一,建议从高频基础组件入手,逐步构建可复用的组件体系。

2501_93396617的博客 1069

Flutter-防京东商城项目-编写热门推荐控件封装-04

一直觉得自己写的不是技术,而是情怀,一个个的教程是自己这一路走来的痕迹。靠专业技能的成功是最具可复制性的,希望我的这条路能让你们少走弯路,希望我能帮你们抹去知识的蒙尘,希望我能帮你们理清知识的脉络,希望未来技术之巅上有你们也有我。 本章学习目标: 1.编写首页热门推荐封装控件 效果 下面的编写的代码 //热门推荐商品 Widget _recProductItemWidget() { var itemWidth = (ScreenAdaper.getScreenWidth() - 30) / 2; //

weixin_38716347的博客 400

10天用Flutter撸了个高仿携程App(附小技巧积累总结)

渐隐渐现的 appBbar搜索组件的封装语音搜索页面banner组件浮动的 icon 导航渐变不规则带有背景图的网格导航以下都是我在项目里使用的知识点,在这里记录分享出来,希望能帮到大家。

2401_89285756的博客 799

Flutter开发日记——Flutter基础入门知识

配置环境 1、安装编辑器 通过官网安装VSCode 2、安装Flutter插件 在VSCode中EXTENSIONS栏中安装Flutter插件 3、检查Flutter插件 通过Command Palette中输入命令检查Flutter的运行环境 run flutter doctor 运行指令时会遇到下面这个错误 [flutter] flutter doctor xcrun: error: inv...

点击置顶文章查看博客目录(全站式导航) 1411

MCP for Blender 完整教程:4步让 AI 替你操作 Blender 建模

晚上十点,脑子里突然冒出一个 3D 场景的点子,但你又不想爬起来开电脑、拖鼠标、翻一堆参数。MCP for Blender 让你直接打一句话,对象就出现在 Blender 里,全程不用碰鼠标。 MCP for Blender 是一个社区开源项目(MIT 协议,与 Blender 官方无关),它通过 MCP(Model Context Protocol,模型上下文协议,一种让 AI 连接外部工具的

gitblog_00916的博客 441

【2025最新】【OpenHarmony跨平台开发】Flutter 常用组件封装实战指南:高效复用与灵活扩展

本文详细介绍了Flutter组件封装的核心技巧,主要包括三大方面:1.封装原则:强调复用性、灵活性和可维护性,提出提取共性、合理设计参数、兼容全局主题和单一职责四大原则;2.高频组件封装:提供按钮、输入框、列表项、加载状态和弹窗5类常用组件的具体实现方案,包含可直接复用的代码示例;3.进阶技巧:涵盖状态组件、组合封装、参数校验和深色模式适配等高级用法。文章指出,合理封装能显著提升开发效率,建议从基础组件入手,逐步掌握状态管理和组合封装技巧,同时避免过度封装。通过组件封装可减少重复代码,使开发更聚焦业务逻辑,

2301_80188585的博客 796

Flutter开发实战:10个必备技巧提升你的开发效率

优先实施技巧1、3、6,可立即提升日常开发效率30%以上。结合项目复杂度逐步引入其他技巧,避免一次性过度优化。

2501_93893169的博客 1909

如何提高Flutter应用程序的性能

item(title: ‘我的钱包’,‘10万’,),),],注意看上图右边下半部分,点击切换的时候,所有的组件全部重建了,理想情况下,应该只是组件进行切换,因此将组件进行封装:@override@override@override});},使用:_item(title: ‘是否允许4G网络下载’,),此时看到重建的组件只有和组件,提高了性能。如果组件的状态改变也会改变其它组件的状态,这是典型的组件间通信,这种情况下可以使用。

2401_84149557的博客 792

【2025】【OpenHarmony跨平台开发】Flutter 核心组件全解析:从基础使用到实战组合

本文系统梳理了Flutter开发中的核心组件体系,涵盖基础展示、布局和交互三大类组件。重点解析了文本(Text/Image)、容器(Container)、线性布局(Row/Column)、弹性布局(Flex)、层叠布局(Stack)等组件的使用场景和关键属性,详细介绍了按钮(ElevatedButton)、输入框(TextField)、列表(ListView)等交互组件的实现方式。

2301_80188585的博客 1228
上一篇: 这是我见过最全、最强的权限系统设计方案!
下一篇: webpack处理vue项目静态资源及public/static/assets目录的区别
jsPao
博客等级 码龄7年 549粉丝 107原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值