我有这个类,它通过使用工厂构造函数获取一些参数,如果实例为空,将创建一个新对象;如果它不为 null,则将返回实例的值,因此我们始终会收到相同的对象(单例)。这就是我在启用 dart 的 null 安全功能之前使用单例模式的方式。
class GuestUser extends User {
static GeustUser _instance;
factory GuestUser(
{required String firstName,
required String lastName,
required String email,
required Address address,
required PaymentInfo paymentInfo}) {
if (_instance == null) {
_instance =
GuestUser._(firstName, lastName, email, address, paymentInfo);
}
return _instance;
}
现在启用空安全,我得到这个错误:
The non-nullable variable '_instance' must be initialized.
Try adding an initializer expression.
也if (_instance == null)
不再需要了。
如果我这样定义_instance
: static late final GuestUser _instance;
那么我不能使用if (_instance == null)
_instance 仅在需要时创建。所以每次调用工厂构造函数时,我都必须删除 if 语句并创建一个新实例。
如何解决这个问题并创建一个启用空值安全的单例类?
我有这个解决方案来使用布尔变量跟踪实例:
static late final GeustUser _instance;
static bool _isInstanceCreated = false;
factory GuestUser(
{required String firstName,
required String lastName,
required String email,
required Address address,
required PaymentInfo paymentInfo}) {
if (_isInstanceCreated == false) {
_instance =
GuestUser._(firstName, lastName, email, address, paymentInfo);
}
_isInsanceCreated = true;
return _instance;
}
但是我想知道是否有一种方法可以在不定义新变量并使用空安全特性的情况下做到这一点