flutter单例 2.0.6以前
class SingletonManager {
// 工厂方法构造函数
factory SingletonManager() => _getInstance();
// instance的getter方法,singletonManager.instance获取对象
static SingletonManager get instance => _getInstance();
// 静态变量_instance,存储唯一对象
static SingletonManager _instance;
// 获取对象
static SingletonManager _getInstance() {
if (_instance == null) {
// 使用私有的构造方法来创建对象
_instance = SingletonManager._internal();
}
return _instance;
}
// 私有的自定义命名式构造方法,通过它实现一个类;
// 子类不能继承internal
// 不是关键字,可定义其他名字
SingletonManager._internal() {
//初始化(设置一些默认的)...
}
//方法
void setGoBack() {
print("object");
}
}
//全局静态变量(取到的都是唯一个)
SingletonManager singletonMager = SingletonManager.instance;
SingletonManager singletonMager = SingletonManager();
测试:
//单例调用
SingletonManager.instance.setGoBack();
singletonMager.setGoBack()
flutter2.0.6单例
///实例
var singleton = SingletonManager();
///类
class SingletonManager {
// 工厂方法构造函数
factory SingletonManager() => _getInstance();
// instance的getter方法,singletonManager.instance获取对象
static SingletonManager get instance => _getInstance();
// 静态变量_instance,存储唯一对象
static SingletonManager _instance = null;
// 获取对象
static SingletonManager _getInstance() {
if (_instance == null) {
// 使用私有的构造方法来创建对象
_instance = SingletonManager._internal();
}
return _instance;
}
// 私有的命名式构造方法,通过它实现一个类 可以有多个构造函数,
// 子类不能继承internal
// 不是关键字,可定义其他名字
SingletonManager._internal() {
//初始化...
}
///方法
void setGoBack() {
print("object");
}
}
//flutter 2.0 以上单例写法
测试:
///验证内存地址是否一致
SingletonManager s1 = SingletonManager();
SingletonManager s2 = SingletonManager.instance;
SingletonManager s3 = singleton;
print(identical(s1, s2)); // 运行结果:true
print(identical(s1, s3)); // 运行结果:true
print(s1 == s2); // 运行结果:true
print(s1 == s3); // 运行结果:true
flutter3.0以上单例写法
///实例
var singleton = SingletonManager();
///单例类
class SingletonManager {
// 工厂方法构造函数 - 通过UserModel()获取对象1
factory SingletonManager() => _getInstance();
// instance的getter方法 - 通过UserModel.instance获取对象2
static SingletonManager get instance => _getInstance();
// 静态变量_instance,存储唯一对象
static SingletonManager? _instance;
// 获取唯一对象
static SingletonManager _getInstance() {
_instance ??= SingletonManager._internal();
return _instance!;
}
//初始化...
SingletonManager._internal() {
//初始化其他操作...
...
}
}
测试:
///验证内存地址是否一致
SingletonManager s1 = SingletonManager();
SingletonManager s2 = SingletonManager.instance;
SingletonManager s3 = singleton;
print(identical(s1, s2)); // 运行结果:true
print(identical(s1, s3)); // 运行结果:true
print(s1 == s2); // 运行结果:true
print(s1 == s3); // 运行结果:true