class AppException implements Exception { final String message; const AppException(this.message); @override String toString() => message; } class NetworkException extends AppException { const NetworkException(super.message); } class AuthException extends AppException { const AuthException(super.message); } class NotFoundException extends AppException { const NotFoundException(super.message); } /// 4xx/5xx response received from the server (excluding 401/404 which have /// dedicated subclasses). Distinguished from `NetworkException` (connection /// failure) so the offline write queue can drop non-retryable failures /// instead of looping forever on a 422. class ServerException extends AppException { final int statusCode; const ServerException(super.message, this.statusCode); }