Skip to content

Enum, sealed и ADT-подход (Dart 3)

Enum

dart
enum Status {
  idle,
  loading,
  success,
  error,
}
dart
String label(Status s) {
  switch (s) {
    case Status.idle:
      return 'idle';
    case Status.loading:
      return 'loading';
    case Status.success:
      return 'success';
    case Status.error:
      return 'error';
  }
}

Sealed классы (исчерпывающие варианты)

dart
sealed class Result<T> {}

final class Ok<T> extends Result<T> {
  final T value;
  Ok(this.value);
}

final class Err<T> extends Result<T> {
  final Object error;
  Err(this.error);
}

Pattern matching со sealed

dart
String describe(Result<int> r) {
  return switch (r) {
    Ok(value: final v) => 'ok=$v',
    Err(error: final e) => 'err=$e',
  };
}

Когда это использовать

  • результат операции: success/error
  • состояние экрана: loading/data/empty/error
  • события в приложении (event types)