我有一个类,它使用工厂构造函数通过一些参数创建对象。如果实例为空,将会创建一个新的对象;如果不为空,实例的值将被返回,因此我们始终会得到相同的对象(单例)。这是我在启用Dart的null-safety功能之前使用单例模式的方式。
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;
}
但我想知道是否有一种方法可以在不定义新变量的情况下,利用空安全的功能来实现这一点。
foo = MySingleton()
来创建该类的实例。 - bikram