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>
This commit is contained in:
45
lib/core/error/failures.dart
Normal file
45
lib/core/error/failures.dart
Normal file
@@ -0,0 +1,45 @@
|
||||
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];
|
||||
}
|
||||
Reference in New Issue
Block a user