Flutter: Mixins


Como utilizar mixins e para que serve...

Os Mixins permitem com que você adicione métodos de outras classes em sua classe sem utilizar herança.

Vamos criar uma classe para podermos entender melhor:

void main(){
Carro c1 = Carro("Fusca");
c1.acelerar(100);
}

class Carro extends Automovel {
String nome;
Carro(this.nome);

void acelerar(int velocidade) {
print("Acelerando com $velocidade km/h");
}

String toString(){
return nome;
}
}

abstract class Automovel {
void acelerar(int velocidade);
}

Agora vamos criar outra classe Combustível em que iremos criar um método abastecer:

class Combustivel{
abastacer(int qtde){
print("Abastecendo $qtde l")
}
}

Como a classe Carro já foi herdada de automóvel, não pode ser herdada da classe de Combustível então vamos utilizar o mixin:

class Carro extends Automovel with Combustivel {
String nome;
Carro(this.nome);

void acelerar(int velocidade) {
print("Acelerando com $velocidade km/h");
}

String toString(){
return nome;
}

}

abstract class Automovel {
void acelerar(int velocidade);
}

É como se o método abastecer fosse copiado para dentro da classe Carro. Sendo assim, podemos agora incluir em main o método que fora adionado:

void main(){
Carro c1 = Carro("Fusca");
c1.acelerar(100);
c1.abastecer(50);
}

class Carro extends Automovel with Combustivel{
String nome;
Carro(this.nome);

void acelerar(int velocidade) {
print("Acelerando com $velocidade km/h");
}

String toString(){
return nome;
}
}

abstract class Automovel {
void acelerar(int velocidade);
}

Agora está tudo funcionando, porém, caso você queira acrescentar mais classes, você pode utilizar uma vírgula e acrescentar a nova classe posteriormente:

class Carro extends Automovel with Combustivel, B, C, D {
String nome;
Carro(this.nome);

void acelerar(int velocidade) {
print("Acelerando com $velocidade km/h");
}

String toString(){
return nome;
}
}

Espero que tenham gostado.

107 Visualizações