98 lines
1.7 KiB
Markdown
98 lines
1.7 KiB
Markdown
# Mixins in Dart: A Comprehensive Guide
|
|
|
|
Mixins are a way of reusing a class's code in multiple class hierarchies. They allow you to add features to a class without inheritance.
|
|
|
|
## 1. Creating a Mixin
|
|
|
|
To create a mixin, use the `mixin` keyword followed by the mixin name.
|
|
|
|
### Example:
|
|
|
|
```dart
|
|
mixin Logger {
|
|
void log(String message) {
|
|
print('Log: $message');
|
|
}
|
|
}
|
|
```
|
|
|
|
## 2. Using a Mixin
|
|
|
|
To use a mixin, use the `with` keyword followed by the mixin name.
|
|
|
|
### Example:
|
|
|
|
```dart
|
|
class User with Logger {
|
|
String name;
|
|
|
|
User(this.name);
|
|
|
|
void greet() {
|
|
log('Hello, $name!');
|
|
}
|
|
}
|
|
|
|
void main() {
|
|
var user = User('Alice');
|
|
user.greet(); // Prints: Log: Hello, Alice!
|
|
}
|
|
```
|
|
|
|
## 3. Multiple Mixins
|
|
|
|
A class can use multiple mixins.
|
|
|
|
### Example:
|
|
|
|
```dart
|
|
mixin Swimmer {
|
|
void swim() => print('Swimming');
|
|
}
|
|
|
|
mixin Flyer {
|
|
void fly() => print('Flying');
|
|
}
|
|
|
|
class Duck with Swimmer, Flyer {}
|
|
|
|
void main() {
|
|
var duck = Duck();
|
|
duck.swim(); // Prints: Swimming
|
|
duck.fly(); // Prints: Flying
|
|
}
|
|
```
|
|
|
|
## 4. Mixin Inheritance
|
|
|
|
Mixins can inherit from other mixins using the `on` keyword.
|
|
|
|
### Example:
|
|
|
|
```dart
|
|
mixin MusicalPerformer on Musician {
|
|
void perform() {
|
|
playInstrument();
|
|
sing();
|
|
}
|
|
}
|
|
|
|
class Musician {
|
|
void playInstrument() => print('Playing instrument');
|
|
void sing() => print('Singing');
|
|
}
|
|
|
|
class Singer extends Musician with MusicalPerformer {}
|
|
|
|
void main() {
|
|
var singer = Singer();
|
|
singer.perform();
|
|
// Prints:
|
|
// Playing instrument
|
|
// Singing
|
|
}
|
|
```
|
|
|
|
## Conclusion
|
|
|
|
Mixins provide a powerful way to reuse code across different class hierarchies. They are particularly useful for adding behavior to classes without the complexity of multiple inheritance. |