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

Flutter 单例模式技巧与最佳实践

Flutter 单例模式技巧与最佳实践

Flutter singleton

视频

https://youtu.be/9kRw-4Rg8tc

https://www.bilibili.com/video/BV1EsxLeAEWx/

前言

原文 Flutter 单例模式技巧与最佳实践

在 Flutter 开发中,单例模式是一种重要的设计模式,能够有效管理共享资源和全局状态。通过实现单例模式,开发者可以确保只有一个实例存在,从而优化应用性能和代码结构。本文探讨了 Flutter 单例模式的实现方法、最佳实践和常见用例,助力开发者在代码架构中更好地应用这一模式。掌握 Flutter 单例模式,将为你的开发工作带来极大便利。

参考

  • Dart documentation
  • 单例模式

正文

实现单例

创建一个简单计数器的 Singleton 类。

class CounterSingleton {
  // 私有构造函数
  CounterSingleton._privateConstructor();

  // 实例化一个静态对象 _instance
  static final CounterSingleton _instance = CounterSingleton._privateConstructor();

  // 公共 getter 方式读取类实例 _instance
  static CounterSingleton get instance => _instance;

  // 类属性
  int counter = 0;

  // 类方法
  void increment() {
    counter++;
  }
}

访问实例

您可以从应用程序的任何地方访问实例及其属性或方法。

// 直接 instance 静态对象访问类实例方法
CounterSingleton.instance.increment();

// 单例访问类属性
print('Counter: ${CounterSingleton.instance.counter}');

懒加载模式

懒初始化会推迟实例的创建,直到实际需要时才创建。

如果单例对象创建时资源消耗较大,这可以提高应用程序的启动时间。

class LazySingleton {
  LazySingleton._privateConstructor();

  static LazySingleton? _instance;

  // 公共 getter 方法,访问时才去初始化实例
  static LazySingleton get instance {
    if (_instance == null) {
      _instance = LazySingleton._privateConstructor();
    }
    return _instance!;
  }

  int counter = 0;

  void increment() {
    counter++;
  }
}

单例使用场景

管理全局配置,如 api 配置、颜色、主题。

class Config {
  Config._privateConstructor();

  static final Config _instance = Config._privateConstructor();

  static Config get instance => _instance;

  String apiUrl = 'https://api.example.com';
  String appName = 'My Flutter App';
}

共享状态管理,如 购物车、用户状态、是否登录。

class UserSession {
  UserSession._privateConstructor();

  static final UserSession _instance = UserSession._privateConstructor();

  static UserSession get instance => _instance;

  String? userId;
  bool get isLoggedIn => userId != null;
}

网络客户端

import 'package:http/http.dart' as http;

class ApiClient {
  ApiClient._privateConstructor();

  static final ApiClient _instance = ApiClient._privateConstructor();

  static ApiClient get instance => _instance;

  final http.Client client = http.Client();

  Future<http.Response> fetchData(String url) {
    return client.get(Uri.parse(url));
  }
}

小结

本文深入探讨 Flutter 中的单例模式,介绍实现技巧、最佳实践和实际用例,帮助开发者有效管理共享资源和全局状态。

感谢阅读本文

如果有什么建议,请在评论中让我知道。我很乐意改进。


猫哥 APP

  • SaaS Fast
  • Flutter GetX Generator

flutter 学习路径

  • Flutter 优秀插件推荐
  • Flutter 基础篇1 - Dart 语言学习
  • Flutter 基础篇2 - 快速上手
  • Flutter 实战1 - Getx Woo 电商APP
  • Flutter 实战2 - 上架指南 Apple Store、Google Play
  • Flutter 基础篇3 - 仿微信朋友圈
  • Flutter 实战3 - 腾讯即时通讯 第一篇
  • Flutter 实战4 - 腾讯即时通讯 第二篇

© 猫哥
ducafecat.com

end


http://www.kler.cn/a/350522.html

相关文章:

  • elasticsearch基础
  • 21.1、网络设备安全概述
  • 【从零开始入门unity游戏开发之——C#篇46】C#补充知识点——命名参数和可选参数
  • 数据库高可用方案-01-数据库备份还原方案
  • windows蓝牙驱动开发-蓝牙设备栈
  • 渗透笔记1
  • java怎么连接数据库sql server
  • Python使用Selenium库实现CSDN自动化发帖
  • 论文阅读-U3M(2)
  • 前端 + Nginx + 后端架构的无感升级方案
  • 2-117 基于matlab的共振峰估计
  • 中国市场的NFT生存法则:消费属性与圈子文化
  • C语言函数递归经典例题:汉诺塔和小青蛙跳台阶
  • C语言简单的链表操作
  • Android 中 View 与 SurfaceView 主动与被动更新的应用场景
  • Vue3 props
  • 注册中心介绍
  • 【原创】java+springboot+mysql劳动教育网系统设计与实现
  • efinance库支持哪些类型的金融数据获取?
  • GitHub每日最火火火项目(10.16)
  • Linux platform子系统和设备树
  • 知识篇:(五)JavaScript 数组进阶操作:对象属性操作、数组转换与求和
  • 在uniapp中实现即时通讯中的【发送语音】
  • 不同数据类型转换与转义的对比差异
  • HarmonyOS NEXT 开发之ArkTS基础入门
  • 搭建`mongodb`副本集-开启权限认证 mongo:7.0.5