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单例的实现 的相关文章

  • 从命令行添加 Xcode 开发者帐户

    我正在尝试使用xcodebuild allowProvisioningUpdates在我只能通过命令行访问的计算机 Azure Devops macOS 托管计算机 上 不幸的是 根据man xcodebuild为了使用 allowProv
  • 在 flutter 中强制重建有状态子部件

    假设我有一个主屏幕 有状态小部件 其中有一个变量count作为状态 在此主屏幕中 有一个按钮和另一个有状态小部件 我们称之为MyListWidget MyListWidget初始化它自己的小部件initState取决于的值count多变的
  • java.lang.IllegalStateException:应用程序 PagerAdapter 更改了适配器的内容,而没有调用 PagerAdapter#notifyDataSetChanged android

    我正在尝试使用静态类将值传递给视图 而不是使用意图 因为我必须传递大量数据 有时我会收到此错误 但无法找出主要原因是什么 Error java lang IllegalStateException The application s Pag
  • NoSuchMethodError:尝试调用非函数,例如 null:'dart.global.firebase.auth'

    Flutter 新手 我怀疑在尝试设置 Firebase Auth 时错过了一些非常简单的事情 一直在网上寻找解决方案 大多数人要求您仔细检查 firebase auth js 是否正确包含在 index html 文件中 这样就完成了 下
  • watchOS 错误:控制器接口描述中的未知属性

    我将 WKInterfacePicker 添加到情节提要中 并将其连接到界面控制器中的 IBOutlet 运行应用程序时 它在控制台中显示一条错误消息 控制器的接口描述 watchPicker 中的未知属性 Code interface I
  • Android Studio 与本地网络共享上的项目文件

    这是我的设置 Android Studio 项目文件位于 Ubuntu 14 10 盒子上的共享文件夹中 尝试在 Windows 8 机器上运行 Android Studio 1 0 2 并将 U 驱动器映射到包含项目文件的 Ubuntu
  • 图像作为电子邮件附件

    我想构建一个应用程序 我可以在电子邮件中附加图像 打开图像并将其设置为我的壁纸 我想让它跨平台 所以你能告诉我是否可以使用phonegap 或者我是否必须为iphone和android构建一个本机应用程序 您好 如果您只想通过电子邮件附加图
  • 在 UIWebView 中播放 Facebook 视频

    有谁知道如何在 Facebook 上播放视频UIWebView 我的应用程序将视频上 传到 Facebook 并检索视频的网址 我想将此网址嵌入到UIWebView播放 我已经为 youtube 解决了这个问题 但没有为 Facebook
  • 如何在 Flutter 上的 sqlite 中存储对象数据列表?

    如何在 Flutter 上的 SQLite 中存储对象数据列表 API 附带的 Json 数据 images id 10 name img1 id 11 name img2 在使用 SQLite 存储对象之前 您需要序列化对象列表 首先 你
  • 从 BroadcastReceiver 类调用活动方法

    我知道我可以做一个内部接收器类来调用接收器中的任何方法 但我的主要活动太大了 要做的事情也很多 因此 我需要一个扩展广播接收器的类 但它不是内部类 并且可以从我的主要活动中调用一种方法 我不知道是否可能 但我的活动是家庭活动和 single
  • Android 中如何通过彩信发送图片?

    我正在开发多媒体应用程序 我正在通过相机捕获一张图像 并希望将该图像和文本发送到其他号码 但我不知道如何通过彩信发送图像 MMS 只是一个 http post 请求 您应该使用执行请求额外的网络功能 final ConnectivityMa
  • 我应该释放或重置 MediaPlayer 吗?

    我有自己的自定义适配器类 称为 WordAdapter 并且我正在使用媒体播放器 名为pronounce WordAdapter 类中的全局变量 我有不同的活动 其中每个列表项都有线性布局 名为linearLayout 我正在设置onCli
  • 如何解决 Xcode 5 中的红色(已移动)文件?

    在 Xcode 4 中 当您要移动文件时 可以通过单击右侧菜单中的按钮并通过 Finder 选择新位置来解析文件的新位置 在 Xcode 5 中 右侧菜单中没有按钮 我还没有找到任何方法通过右键单击文件或顶部菜单栏选项来指定文件的新位置 在
  • 您使用什么物理 Android 设备进行测试?

    有什么好的推荐用于测试目的的物理 Android 设备吗 我正在苹果阵营寻找像 iPod touch 这样的设备 可以帮助 iOS 开发人员测试他们的东西 我知道有 Nexus One 但那东西相当昂贵 而且我并不真正关心手机的东西 而是可
  • 上网本上可以进行Android开发吗? [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我想使用我的上网本进行 Android 开发 但是当我尝试使用 Eclipse 运行 SDK 时 没有加载任何内容 上网本对于 Android 开发来
  • 在命令行上卸载 Android SDK 的选定部分

    这与 卸载旧的 Android SDK 版本 https stackoverflow com questions 15182377 uninstall old android sdk versions 除非我想在无头 Linux CI 服务
  • 通过电子邮件发送文本文件附件

    我正在尝试附加一个文本文件以便通过电子邮件发送 但每当我打开电子邮件应用程序时 它都会说该文件不存在 请帮助 Intent i new Intent Intent ACTION SEND i setType text plain i put
  • Android:如何从网络异步获取搜索建议?

    我创建了一个可搜索的活动 现在 我想添加从网络服务获取的搜索建议 我想异步获取这些建议 根据添加自定义建议 http developer android com guide topics search adding custom sugge
  • 发布的 Android apk 出现错误“包文件未正确签名”

    我最近将我的应用程序上传到 Android 市场 但是由于错误 下载时它拒绝运行 包文件未正确签名 我首先使用 eclipse 发布了数据包 右键单击导出 创建密钥库然后发布 但它拒绝工作 然后我下载了 keytool 和 jarsigne
  • 隐藏选项卡栏项目并对齐其他选项卡项目

    在我的应用程序中 我有 4 个选项卡栏项目 我正在 XIB 文件中添加这 4 个选项卡栏项目 最初我必须显示 3 个选项卡栏项目 同步后我必须在我的应用程序中显示第 4 个选项卡栏项目 因此 为此 我使用以下代码隐藏第四个选项卡栏项目 se

随机推荐

  • 华为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简单代码片段还是