BLoC/Cubit state management, ADHD-friendly theme (calming teal, no red), GetIt DI, GoRouter navigation. Screens: task dashboard, focus mode, task create/detail, streaks, time perception, settings, onboarding, auth. Custom widgets: TaskCard, RewardPopup, StreakRing, GentleNudgeCard. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
46 lines
1.4 KiB
Dart
46 lines
1.4 KiB
Dart
import 'package:equatable/equatable.dart';
|
|
|
|
/// Base failure type for the application.
|
|
///
|
|
/// Uses a sealed class hierarchy so `switch` expressions are exhaustive.
|
|
sealed class Failure extends Equatable {
|
|
final String message;
|
|
const Failure(this.message);
|
|
|
|
@override
|
|
List<Object?> get props => [message];
|
|
}
|
|
|
|
/// Returned when the backend API responds with a non-2xx status.
|
|
class ServerFailure extends Failure {
|
|
final int? statusCode;
|
|
const ServerFailure(super.message, {this.statusCode});
|
|
|
|
@override
|
|
List<Object?> get props => [message, statusCode];
|
|
}
|
|
|
|
/// Returned when the device has no network connectivity.
|
|
class NetworkFailure extends Failure {
|
|
const NetworkFailure([super.message = 'No internet connection. Your changes are saved locally.']);
|
|
}
|
|
|
|
/// Returned when reading / writing the local cache fails.
|
|
class CacheFailure extends Failure {
|
|
const CacheFailure([super.message = 'Could not access local storage.']);
|
|
}
|
|
|
|
/// Returned for authentication problems (expired token, bad credentials, etc.).
|
|
class AuthFailure extends Failure {
|
|
const AuthFailure([super.message = 'Authentication failed. Please sign in again.']);
|
|
}
|
|
|
|
/// Returned when user input does not pass validation.
|
|
class ValidationFailure extends Failure {
|
|
final Map<String, String> fieldErrors;
|
|
const ValidationFailure(super.message, {this.fieldErrors = const {}});
|
|
|
|
@override
|
|
List<Object?> get props => [message, fieldErrors];
|
|
}
|