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

flutter 单例模式

总的思想就是:
确保整个应用程序中只有一个 TranslationService 实例。
避免重复创建相同的实例,节省资源。
为整个应用程序提供一个全局访问点,方便在不同地方使用同一个实例。

1.类创建个实例
2.然后用构造函数赋值给实例
3.其他地方调用时返回实例

import 'package:social_im/google_translation/google_translation.dart';class TranslationService {
//创建私有的静态实例_instance,通过调用私有构造函数 TranslationService._internal() 来初始化这个实例。static final TranslationService _instance = TranslationService._internal();//这是一个工厂构造函数,它返回已经创建好的 _instance 实例。当我们调用 TranslationService() 时,实际上是在获取这个已经创建好的单例实例。factory TranslationService() {return _instance;}//这是一个私有的命名构造函数,它被用于创建那个单例实例。通过将构造函数设为私有,我们确保了只有类内部能够创建实例,外部无法直接使用 new TranslationService._internal() 来创建新实例。TranslationService._internal();final _googleTranslation = GoogleTranslation(apiKey: 'YOUR_API_KEY',onError: (error) {// 处理错误print('Translation error: $error');},);//final translationService = TranslationService();
// final translatedText = await translationService.translateText('Hello', 'zh');
// print(translatedText); // 输出翻译后的文本Future<String> translateText(String text, String targetLanguage) async {final translation = await _googleTranslation.translate(text: text,to: targetLanguage,);return translation.translatedText;}// final detectedLanguage = await translationService.detectLanguage('Hello');
// print(detectedLanguage); // 输出检测到的语言代码Future<String> detectLanguage(String text) async {final detection = await _googleTranslation.detectLang(text: text);return detection.detectedSourceLanguage;}
}

第二种方法:

class ZeGoCallPayUtils {//这一行声明了一个静态变量 _instance,用于存储单例实例。它被声明为可空的 ZeGoCallPayUtils? 类型。static ZeGoCallPayUtils? _instance;//这是一个私有的命名构造函数 _internal()。当这个构造函数被调用时,会执行:_instance = this; 将当前实例赋值给静态变量 _instance。ZeGoCallPayUtils._internal() {_instance = this;PrintUtil.prints('$TAG 初始化数据');}//这是一个工厂构造函数。当你调用 ZeGoCallPayUtils() 时,它会执行以下操作:_instance ?? ZeGoCallPayUtils._internal(); 如果 _instance 不为空,则返回 _instance。如果 _instance 为空,则调用私有构造函数 _internal() 创建一个新实例。factory ZeGoCallPayUtils() => _instance ?? ZeGoCallPayUtils._internal();
}

通过这些方式,我们确保了只有一个 ZeGoCallPayUtils 实例会被创建

http://www.lryc.cn/news/327199.html

相关文章:

  • 1.7.2 python练习题15道
  • python如何获取word文档的总页数
  • python解压RAR文件
  • 灯哥驱动器端口讲解----foc电机驱动必看
  • lua 获取指定路径下的所有文件夹
  • #Linux(SSH软件安装及简单使用)
  • Android中运动事件的处理
  • 【网安小白成长之路】3.MySQL环境配置以及常用命令(增删改查)
  • 【QGIS从shp文件中筛选目标区域导出为shp】
  • react native hooks 如何避免重复请求
  • 【任职资格】某大型制造型企业任职资格体系项目纪实
  • 线程安全问题及解决
  • Excel·VBA数组平均分组问题
  • 高防服务器、高防IP、高防CDN的工作原理是什么
  • 【Flask开发实战】安装mysql数据库与配置连接
  • Java项目:79 springboot海滨体育馆管理系统的设计与实现
  • 17.注释和关键字
  • Mac上配置host
  • JAVA------基础篇
  • Python人工智能:气象数据可视化的新工具
  • springMVC实现细节
  • ubuntu16 apt安装程序锁死解决
  • 计算机网络——26通用转发和SDN
  • Modbus TCP协议介绍(ModbusTCP)
  • 【Java核心能力】一篇文章了解 ZooKeeper 底层运行原理
  • P2123皇后游戏
  • git之目前的主流版本
  • PyQT5学习--新建窗体模板
  • 企业产品网络安全建设日志0328
  • QT(C++)-error LNK2038: 检测到“_ITERATOR_DEBUG_LEVEL”的不匹配项: 值“2”不匹配值“0”