What are mixins in Dart?
Dart mixins
A mixin is a class with methods and properties utilized by other classes in Dart.
It is a way to reuse code and write code clean.
To declare a mixin, we use the mixin keyword:
mixin Mixin_name{
}
Mixins, in other words, are regular classes from which we can grab methods (or variables) without having to extend them. To accomplish this, we use the with keyword.
Let’s understand this better with a code example.
Code
The following code shows how to implement mixin in Dart.
// Creating a Bark mixinmixin Bark {void bark() => print('Barking');}mixin Fly {void fly() => print('Flying');}mixin Crawl {void crawl() => print('Crawling');}// Creating an Animal classclass Animal{void breathe(){print("Breathing");}}// Createing a Dog class, which extends the Animal class// Bark is the mixin with the method that Dog can implementclass Dog extends Animal with Bark {}// Creating a Bat class Bat, which extends the Animal class// Fly is the mixin with the method that Bat can implementclass Bat extends Animal with Fly {}class Snake extends Animal with Crawl{// Invoking the methods within the displayvoid display(){print(".....Snake.....");breathe();crawl();}}main() {var dog = Dog();dog.breathe();dog.bark();var snake = Snake();snake.display();}
Explanation
- Lines 2–4: We create a mixin named
Barkusing thebark()method. - Lines 6–8: We create a mixin named
Flyusing thefly()method. - Lines 10–12: We create a mixin named
Crawlusing thecrawl()method. - Lines 14–18: We create a class named
Animalusing thebreathe()method. - Line 21: We create a class named
Dogwhich extends theAnimalclass. TheDogclass uses thewithkeyword to access the method in theBarkmixin class. - Line 25: We create a class named
Batwhich extends theAnimalclass. TheBatclass uses thewithkeyword to access the method in theFlymixin class. - Lines 27–34: We create a class named
Snakewhich extends theAnimalclass. TheDogclass uses thewithkeyword to access the method in theCrawlmixin class. In theSnakeclass, we create a method calleddisplay()which invokes the methods the class can implement. - Lines 36–43: We create the
main()function. Inmain(), we create objects of theDogandSnakeclasses, which are “dog” and “snake” respectively. Finally, we use the objects created to invoke the methods.
Note: A mixin cannot be instantiated.