flutter 单例模式

总的思想就是:

确保整个应用程序中只有一个 TranslationService 实例。

避免重复创建相同的实例,节省资源。

为整个应用程序提供一个全局访问点,方便在不同地方使用同一个实例。

1.类创建个实例

2.然后用构造函数赋值给实例

3.其他地方调用时返回实例

c 复制代码
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;
  }
}

第二种方法:

c 复制代码
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 实例会被创建

相关推荐
ujainu3 小时前
保护你的秘密:Flutter + OpenHarmony 鸿蒙记事本添加笔记加密功能(五)
flutter·openharmony
特立独行的猫a3 小时前
主要跨端开发框架对比:Flutter、RN、KMP、Uniapp、Cordova,谁是未来主流?
flutter·uni-app·uniapp·rn·kmp·kuikly
bjzhang753 小时前
使用 HTML + JavaScript 实现文件树
javascript·html·文件树
一只大侠的侠3 小时前
Flutter开源鸿蒙跨平台训练营 Day17Calendar 日历组件开发全解
flutter·开源·harmonyos
晚霞的不甘3 小时前
Flutter for OpenHarmony 打造沉浸式呼吸引导应用:用动画疗愈身心
服务器·网络·flutter·架构·区块链
掘金安东尼3 小时前
⏰前端周刊第 452 期(2026年2月2日-2月8日)
前端·javascript·github
ArkPppp3 小时前
NestJS全栈实战笔记:优雅处理 Entity 与 DTO 的映射与字段过滤
javascript·nestjs
钟智强4 小时前
React2Shell:CVE-2025-66478 Next.js 远程执行漏洞深度分析与代码剖析
开发语言·javascript·ecmascript
renke33644 小时前
Flutter for OpenHarmony:数字涟漪 - 基于扩散算法的逻辑解谜游戏设计与实现
算法·flutter·游戏
Dragon Wu4 小时前
Electron Forge集成React Typescript完整步骤
前端·javascript·react.js·typescript·electron·reactjs