Create a Singleton in Dart
Dart provides factory constructors, which simplifies the creation of singletons.
class Singleton {
static final Singleton _singleton = Singleton._internal();
factory Singleton() => _singleton;
Singleton._internal(); // private constructor
}
main() {
var s1 = Singleton();
var s2 = Singleton();
print(identical(s1, s2)); // true
print(s1 == s2); // true
}
The factory
construct specifies that whenever there is a request for a new Singleton
instance, run the specified constructor function.
Another way is to use a static field that use a private constructor. This way it is not possible to create a new instance using Singleton()
, the reference to the only instance is available only through the instance
static field.
class Singleton {
Singleton._privateConstructor();
static final Singleton instance = Singleton._privateConstructor();
}
main() {
var s1 = Singleton.instance;
var s2 = Singleton.instance;
print(identical(s1, s2)); // true
print(s1 == s2); // true
}
A singleton can be used for a Session storage
class Session {
// singleton
static final Session _singleton = Session._internal();
factory Session() => _singleton;
Session._internal();
static Session get shared => _singleton;
String username;
String password;
}
Session.shared.username = 'abc';