Flutter基础Dart单例的实现

395 阅读1分钟

引言

在日常开发搭建基础框架时,常常用到全局使用的数据类或者工具类,比如日期工具类,地图工具类等。在项目一般使用几种单例类来分享心得,有类实例方式、工厂方式以及类静态方式。

实例方式

使用DartPad.cn网站来练习dart简单代码片段还是很方便,下面的例子均在此网站执行并验证结果。

class Student {
  //使用方式,可先实例化一个
  //实例是单例
  Student._();
  static Student? _singleton;
  static Student init() => _singleton ??= Student._();
  static void dispose() => _singleton = null;
  //
  String? name;
  int? age;
}
void main() {
  Student a = Student.init();
  a.name="zhang";
  a.age=15;
  print(a.name);//zhang
  Student b = Student.init();
  b.name="李";
  print(a.name);//李
  print(b.name);//李
  print(b.age);//15
}

工厂方式


class MapUtil {
  //使用方式MapUtil(),需要先初始化,可异步
  //单例,全局使用
  MapUtil._(); //也可初始化,不能异步
  static MapUtil? _singleton;
  factory MapUtil() => _singleton ??= MapUtil._();
  static void dispose() => _singleton = null;
  //初始化
  void init() {}
}
void main() {
  MapUtil().init();
  ThemeGlobal().name="李";
  print(ThemeGlobal().name);
}

静态方式

//类静态方式
class DataApi {
static Future<String> getName()async=> "zhang";
}
void main() async{
  String name = await DataApi.getName();
  print(name);
}

结语

这次分享代码都是最简化的,看到代码基本也能快速理解含义,也容易记住写法,三种实现单例的方式在Flutter开发实践中经常使用,需要哪种方式可以根据实际情况选择。后期也会分门别类多分享在项目中心得,分享也是一种学习。