Files
focusflow/lib/core/error/failures.dart
Oracle Public Cloud User 50931d839d Initial scaffold: FocusFlow ADHD Task Manager Flutter app
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>
2026-03-04 15:53:58 +00:00

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];
}