- Create auth feature with Clean Architecture (domain/data/presentation) - Add login and register pages with form validation - Implement secure token storage with flutter_secure_storage - Create AuthenticatedClient for automatic Bearer token headers - Add AuthViewModel for global auth state management - Update router with auth guards (redirect to login if not authenticated) - Add logout option to settings page - Update TaskRemoteDataSource to use authenticated client - Add auth-related localization strings (EN/DE)
38 lines
1016 B
Dart
38 lines
1016 B
Dart
abstract class Failure {
|
|
final String message;
|
|
final String? code;
|
|
|
|
const Failure({required this.message, this.code});
|
|
|
|
@override
|
|
String toString() => 'Failure(message: $message, code: $code)';
|
|
}
|
|
|
|
class ServerFailure extends Failure {
|
|
const ServerFailure({required super.message, super.code});
|
|
}
|
|
|
|
class NetworkFailure extends Failure {
|
|
const NetworkFailure({super.message = 'Network connection error', super.code});
|
|
}
|
|
|
|
class ValidationFailure extends Failure {
|
|
const ValidationFailure({required super.message, super.code});
|
|
}
|
|
|
|
class NotFoundFailure extends Failure {
|
|
const NotFoundFailure({super.message = 'Resource not found', super.code});
|
|
}
|
|
|
|
class UnexpectedFailure extends Failure {
|
|
const UnexpectedFailure({super.message = 'An unexpected error occurred', super.code});
|
|
}
|
|
|
|
class AuthFailure extends Failure {
|
|
const AuthFailure({required super.message, super.code});
|
|
}
|
|
|
|
class UnauthorizedFailure extends Failure {
|
|
const UnauthorizedFailure({super.message = 'Unauthorized', super.code});
|
|
}
|