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

Ducafecat
5 min readOct 16, 2024

--

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

视频

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

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

前言

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

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

参考

正文

实现单例

创建一个简单计数器的 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 中的单例模式,介绍实现技巧、最佳实践和实际用例,帮助开发者有效管理共享资源和全局状态。

感谢阅读本文

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

© 猫哥 ducafecat.com

end

--

--

Ducafecat
Ducafecat

No responses yet