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

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

Flutter singleton

视频

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

感谢阅读本文

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


flutter 学习路径


© 猫哥 ducafecat.com

end