Skip to content

ООП: классы, наследование, миксины, extensions

Класс и конструкторы

dart
class User {
  final String id;
  String name;

  User(this.id, this.name);

  User.guest()
      : id = 'guest',
        name = 'Guest';

  String get label => '$name ($id)';
}

Именованные конструкторы и factory

dart
class Point {
  final int x;
  final int y;

  const Point(this.x, this.y);

  factory Point.origin() => const Point(0, 0);
}

Наследование

dart
class Animal {
  final String name;

  Animal(this.name);

  void speak() {
    print('...');
  }
}

class Dog extends Animal {
  Dog(super.name);

  @override
  void speak() {
    print('woof');
  }
}

Абстрактные классы и implements

dart
abstract class Storage {
  Future<void> save(String key, String value);
  Future<String?> read(String key);
}

class MemoryStorage implements Storage {
  final _data = <String, String>{};

  @override
  Future<void> save(String key, String value) async {
    _data[key] = value;
  }

  @override
  Future<String?> read(String key) async {
    return _data[key];
  }
}

Mixins

dart
mixin Logger {
  void log(String message) {
    print(message);
  }
}

class Service with Logger {
  void run() {
    log('running');
  }
}

Extensions

dart
extension StringX on String {
  bool get isBlank => trim().isEmpty;
}

final ok = '  '.isBlank;