Dart — Mixins

2024-01-23T18:00:00-05:00 | 3 minutos de lectura | Actualizado en 2025-01-24T07:42:46-05:00

jaimetellezb
Dart — Mixins

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!

Fuentes

© 2022 - 2025 jaimetellezb - Compartir guías y tutoriales de programación.

🌱 Powered by Hugo with theme Dream.

Sobre mí

alt

Ingeniero de software

Hola, bienvenidos a mi blog sobre guías y tutoriales de programación.

Aquí podrás encontrar guías y tutoriales sobre algunos temas de tecnología en general. La idea es poder ayudar a que ciertas cosas como configuraciones de nuevas herramientas sean más fáciles de abordar y utilizar. También pequeños proyectos donde se usen diferentes tecnologías como ejemplo.

Enlaces sociales