Flutter基础Dart单例的实现

2023-11-20

在这里插入图片描述

引言

在日常开发搭建基础框架时,常常用到全局使用的数据类或者工具类,比如日期工具类,地图工具类等。在项目一般使用几种单例类来分享心得,有类实例方式、工厂方式以及类静态方式。

实例方式

使用DartPad.cn网站来练习dart简单代码片段还是很方便,下面的例子均在此网站执行并验证结果。

class Student {
  //使用方式,可先实例化一个
  //实例是单例
  Student._();
  static Student? _singleton;
  static Student init() => _singleton ??= Student._();
  //
  String? name;
  int? age;
}
void main() {
  Student a = Student.init();
  a.name="zhang";
  a.age=15;
  print(a.name);//zhang
  Student b = Student.init();
  b.name="李";
  print(a.name);//李
  print(b.name);//李
  print(b.age);//15
}

工厂方式


class MapUtil {
  //使用方式MapUtil(),需要先初始化,可异步
  //单例,全局使用
  MapUtil._(); //也可初始化,不能异步
  static MapUtil? _singleton;
  factory MapUtil() => _singleton ??= MapUtil._();
  void dispose() => _singleton = null;
  String? name;
  //初始化
  void init() async{
    name ='Dart';
  }
}
void main() {
  MapUtil().init();
  print(MapUtil().name);//Dart
  MapUtil().dispose();
  print(MapUtil().name);//null
}
//标准单例
class CommonUtil {
  //使用方式--CommonUtil.instance
  //单例
  static CommonUtil? _singleton;
  static CommonUtil get instance => _singleton ??= CommonUtil._();
   void dispose() => _singleton = null;
  CommonUtil._(); 
  String? name;
  void init()async{
    name ='Flutter';
  }
}
void main() {
CommonUtil.instance.init();
print(CommonUtil.instance.name);//Flutter
CommonUtil.instance.dispose();
print(CommonUtil.instance.name);//null
}

静态方式

//类静态方式
class DataApi {
  static String? commany;
static Future<String> getName()async=> "Flutter";
  static void dispose(){
    commany=null;
  }
}
void main() async{
  DataApi.commany='Google';
  print(await DataApi.getName());//Flutter
  print(DataApi.commany);//Google
}

结语

这次分享代码都是最简化的,看到代码基本也能快速理解含义,也容易记住写法,三种实现单例的方式在Flutter开发实践中经常使用,需要哪种方式可以根据实际情况选择。后期也会分门别类多分享在项目中心得,分享也是一种学习。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Flutter基础Dart单例的实现 的相关文章

随机推荐

  • 华为OD机试真题- 日志首次上报最多积分【2023Q1】

    题目描述 日志采集是运维系统的的核心组件 日志是按行生成 每行记做一条 由采集系统分批上报 如果上报太频繁 会对服务端造成压力 如果上报太晚 会降低用户的体验 如果一次上报的条数太多 会导致超时失败 为此 项目组设计了如下的上报策略 1 每
  • 三种出包命令npm, yarn, webpack的对比

    在出包的时候 总是会在不同项目里看到不同的出包命令 但留心观察了一下 最常被使用的就是下面这三个 npm run XXX yarn run XXX webpack entry file destination for bundled fil
  • C++---之waitKey()函数

    waitKey 函数详解 1 waitKey 这个函数是在一个给定的时间内 单位ms 等待用户按键触发 如果用户没有按下 键 则接续等待 循环 2 如下所示 while 1 if waitKey 100 27 break 在这个程序中 我们
  • eclipse maven 导出项目依赖的jar包

    本文转自至 http blog csdn net andyliulin article details 46544555 一 导出到默认目录 targed dependency 从Maven项目中导出项目依赖的jar包 进入工程pom xm
  • Qt在windows和linux下使用默认浏览器打开设置的链接

    QString webstr http www baidu com 设置要打开的网页 bool openService QDesktopServices openUrl QUrl webstr 使用默认浏览器打开 if openServic
  • Testflight 添加外部测试人员

    内部测试人员 不需要提供所有的metadata 外部测试人员 为了使得外部人员可以测试app的预发布build 必须提供如下的metadata What to test App description Feedback email Mark
  • 利用Python读取MongoDB的数据

    近日在处理数据的时候遇到一个问题 数据存储在MongoDB数据库 如图1 而MongoDB模式自由 具有很大的灵活性 可以把不同结构的文档存储在同一个数据库里 即表的字段不是完全固定的 当某个字段有值时就会显示该字段 而当该字段没有值时就不
  • 3.git 将本地仓库推到远程

    1 创建一个本地仓库 git init 2 把文件添加到版本仓库中 git add 3 生成提交记录 git commit m git init 4 关联到远程库 git remote add origin 你的远程库 5 获取远程库与本地
  • jsoncpp封装和解析字符串、数字、布尔值和数组

    使用jsoncpp进行字符串 数字 布尔值和数组的封装与解析 1 下载jsoncpp的代码库 百度网盘地址 http pan baidu com s 1ntqQhIT 2 解压缩文件 jsoncpp rar unzip jsoncpp ra
  • 解决BeanNotOfRequiredTypeException办法(@Autowired和@Resource注解的不同)

    1 错误信息 org springframework beans factory BeanNotOfRequiredTypeException Bean named aisleService must be of type com gdie
  • Nmap源码分析(主机发现)

    Nmap源码分析 主机发现 2012年8月9日 Nmap在进行真正的端口扫描之前 通常需要确定目标主机是否在线 主机发现过程 以免发送大量探测包到不在线的主机 主机发现作为Nmap的基本功能之一 用户也可以单独运用 例如 仅仅需要确定局域网
  • 盘点3款超好用的免费录屏软件,快来看!

    在现代数字化社会中 录屏软件成为了各行各业中必备的工具之一 用于记录操作步骤 制作教程 分享游戏精彩瞬间等 而寻找一款免费的 功能强大的录屏软件也变得越来越重要 本文将为您介绍3款免费录屏软件 并详细说明使用步骤 帮助您找到适合自己需求的录
  • 制作OLED图标

    制作OLED图标 陈拓 2021 06 24 2021 06 26 1 概述 制作用于OLED显示的图标 获取C语言图像点阵数据 2 图标库 先准备图标图像 可以从图标库中找需要的图案 下面两个是我常用的图标网站 2 1 Font Awes
  • 什么是gdb,gdb的简单用法

    在Linux中 gdb是GNU调试器 GNU debugger 的缩写 它是一个强大的命令行调试工具 用于调试C C 和其他编程语言的程序 使用gdb可以执行以下任务 启动程序并逐行执行代码 设置断点 以便在特定位置停止程序执行 检查变量的
  • php漏洞eval,Web安全之代码执行漏洞

    原标题 Web安全之代码执行漏洞 内容 1 代码执行漏洞的概述 2 代码执行漏洞的危害 3 代码执行漏洞的利用 4 代码执行漏洞的防御 背景介绍 在Web应用中有时候程序员为了考虑灵活性 简洁性 会在代码调用eval函数 PHP函数 去处理
  • oracle imp lrm 00101,LRM-00101: unknown parameter name解决办法

    LRM 00101 unknown parameter name解决方法 点击右边红色标题查看本文完整版 LRM 00101 unknown parameter name解决方法 SQL gt startup pfile d oracle
  • 2023华为od机试 Python【比赛冠军】

    题目 我们现在有若干个运动员 每个运动员有自己独特的id 每个运动员的能力不同 比赛按照如下规则进行 0号和1号 2号和3号 以此类推 在每一轮比赛中 获胜的进入下轮 输入描述 输入一行N个数字代表N的运动员的实力值 输出冠亚季军的id 用
  • 逻辑思维训练题

    1 估算你所在城市理发店的数量 https www jianshu com p 1431daad2c62 这种思维方式的核心 就是把你要探索的结果用一个数理公式展示出来 我们用最开始的煎饼摊例子来看怎么算 就要用到 利润 收入 变动成本 而
  • 用于包管理的基本命令APT-GET和APT-CACHE

    这篇文章解释你如何快速学习从命令行使用apt get和apt cache安装 移除 升级和搜索软件包 这篇文章提供一些有用命令 它们将帮助你在基于Debian Ubuntu的系统中处理包管理 apt get是什么 apt get工具是一个强
  • Flutter基础Dart单例的实现

    引言 在日常开发搭建基础框架时 常常用到全局使用的数据类或者工具类 比如日期工具类 地图工具类等 在项目一般使用几种单例类来分享心得 有类实例方式 工厂方式以及类静态方式 实例方式 使用DartPad cn网站来练习dart简单代码片段还是