Tabla de Contenido
Introducción
Los Mixins son una característica en Dart, que permite compartir funcionalidades entre clases de manera más flexible sin tener herencia múltiple.
Mixins
Los Mixins son una forma de definir código que se puede reutilizar en varias jerarquías de clases.
Se crean utilizando la palabra clave mixin seguida de un nombre y llaves, es casi igual a la creación de una clase, solo cambia la palabra class por mixin.
mixin Logger {
void log(String message) {
print('Log: $message');
}
}
Un mixin no puede ser instanciado directamente, se debe usar la palabra reservada with seguida de el nombre que tenga el mixin creado, también se pueden agregar varios mixins.
mixin Logger {
void log(String message) {
print('Log: $message');
}
}
// al utilizar la palabra clave with se puede agregar uno o varios mixins
// separados por coma.
class Info with Logger {
// con hacer esto ya la clase Info tiene acceso al método log de Logger.
}
void main() {
var info = Info();
info.log('Hola Mundo!');
}
Tanto los mixin como mixin class, no pueden heredar de otra clase, es decir, no pueden usar la palabra extends, saldrá un error de compilación.
// Sale el siguiente error:
// The class 'Teacher' can't be declared a mixin
// because it extends a class other than 'Object'.
mixin class Teacher extends Person {
}
Forma correcta de usar un mixin.
mixin A {}
class C with A {}
También es posible restringir el uso de los mixins a una clase específica con la palabra clave on.
class Shape {
// clase que queremos restringir
}
mixin DrawShape on Shape {
// mixin generado con la palabra on seguido de la clase
}
class Rectangle extends Shape with DrawShape {
// solo las clases que heredan de Shape pueden usar DrawShape
}
```
Existe otro tipo de `mixin` que son las `Abstract mixin class`, las clases `mixin` abstractas, los métodos que se definan en ella, obligatoriamente deben ser declarados en las clases que usen el `mixin` abstracto. Otra característica es que si puede usarse with y extends para esta clase de `mixins`.
```dart
abstract mixin class Logger {
void log(String message);
}
class InfoLogger with Logger {
@override
void log(String message) {
print('Info: $message');
}
}
class ErrorLogger with Logger {
@override
void log(String message) {
print('Error: $message');
}
}
void main() {
var error = ErrorLogger();
error.log('Log de error');
var info = InfoLogger();
info.log('Log informativo');
}
Conclusión
Los mixins son una gran alternativa para manejo de herencia múltiple, para así reutilizar código y ser más flexibles en nuestro código.
Con los mixins terminamos la serie de publicaciones sobre Dart básico, ahora podemos empezar el aprendizaje sobre Flutter
.
¡Gracias por leer!
