Patrón singleton en Flutter

- Andrés Cruz

De forma sencilla, singleton garantiza que una clase tenga solo una instancia en todas las aplicaciones y proporciona un punto de acceso global.

Una instancia u objeto de una Clase es una representación concreta y específica de una Clase

¿Cuándo usarlo?

Este patrón se usa cuando solo necesitamos una instancia de algo en nuestra aplicación. Por ejemplo, en el caso de que un usuario inicie sesión en nuestra aplicación, necesitamos esta información en varias partes, pero sería demasiado costoso en términos de procesamiento tener la información del usuario para cada flujo. En este caso podemos crear un singleton de usuario y sería la misma instancia para todos los flujos.

Beneficios

  1. Acceso controlado a una única instancia de datos. Es decir, puedes tener un control estricto sobre cómo y cuándo los clientes acceden a él.
  2. La instancia se crea solo cuando se va a utilizar.
  3. Accesible desde cualquier parte, singleton es una mejora con respecto a las variables globales.

¿Cómo garantizamos que una Clase tenga una sola instancia?

Una solución es hacer que la misma clase sea responsable de su única instancia. La Clase puede garantizar que no se pueda crear otra instancia y debe proporcionar una forma de acceder a la instancia.

Singleton en Flutter

Una forma de crear un singleton en Dart es utilizar constructores de fábrica. Puedes encontrar la propuesta original aquí. Como ejemplo, vamos a crear un usuario singleton que tendrá el nombre de usuario. Para ello, primero creamos una clase normal llamada UserSingleton. Lo convertimos en un singleton creando una variable privada _instance de tipo UserSingleton. Luego creamos la fábrica UserSingleton() que devuelve la instancia.

Finalmente, creamos el constructor UserSingleton._internal() que se llama exactamente una vez, y como es privado solo se puede llamar en esta Clase y también evitamos que se instancia fuera de aquí. Este constructor se puede utilizar para inicializar la lógica.

En el ejemplo que vamos a utilizar también tenemos un método para actualizar el nombre de usuario.

Finalmente, UserSingleton es el siguiente:

class UserSingleton {
 static final UserSingleton _instance = UserSingleton._internal();
 String userName = 'Andres';
 // using a factory is important
 // because it promises to return _an_ object of this type
 // but it doesn't promise to make a new one.
 factory UserSingleton() {
   return _instance;
 }
 // This named constructor is the "real" constructor
 // It'll be called exactly once, by the static property assignment         above
 // it's also private, so it can only be called in this class
 UserSingleton._internal() {
   // initialization logic
 }
 // rest of class as normal, for example:
 void updateUserName(String name) {
   userName = name;
 }
}

Articulo original:

https://medium.com/@alvaro.armijoss/singleton-in-flutter-c8d187820364

Andrés Cruz

Desarrollo con Laravel, Django, Flask, CodeIgniter, HTML5, CSS3, MySQL, JavaScript, Vue, Android, iOS, Flutter

Andrés Cruz en Udemy

Acepto recibir anuncios de interes sobre este Blog.