141 lines
3.7 KiB
Dart
141 lines
3.7 KiB
Dart
/// 应用异常基类
|
||
abstract class AppException implements Exception {
|
||
final String message;
|
||
final String? code;
|
||
final dynamic details;
|
||
|
||
const AppException(this.message, {this.code, this.details});
|
||
|
||
@override
|
||
String toString() => 'AppException: $message';
|
||
}
|
||
|
||
/// 网络异常
|
||
class NetworkException extends AppException {
|
||
const NetworkException(super.message, {super.code, super.details});
|
||
|
||
@override
|
||
String toString() => 'NetworkException: $message';
|
||
}
|
||
|
||
/// 认证异常
|
||
class AuthException extends AppException {
|
||
const AuthException(super.message, {super.code, super.details});
|
||
|
||
@override
|
||
String toString() => 'AuthException: $message';
|
||
}
|
||
|
||
/// 验证异常
|
||
class ValidationException extends AppException {
|
||
const ValidationException(super.message, {super.code, super.details});
|
||
|
||
@override
|
||
String toString() => 'ValidationException: $message';
|
||
}
|
||
|
||
/// 服务器异常
|
||
class ServerException extends AppException {
|
||
const ServerException(super.message, {super.code, super.details});
|
||
|
||
@override
|
||
String toString() => 'ServerException: $message';
|
||
}
|
||
|
||
/// 缓存异常
|
||
class CacheException extends AppException {
|
||
const CacheException(super.message, {super.code, super.details});
|
||
|
||
@override
|
||
String toString() => 'CacheException: $message';
|
||
}
|
||
|
||
/// 文件异常
|
||
class FileException extends AppException {
|
||
const FileException(super.message, {super.code, super.details});
|
||
|
||
@override
|
||
String toString() => 'FileException: $message';
|
||
}
|
||
|
||
/// 权限异常
|
||
class PermissionException extends AppException {
|
||
const PermissionException(super.message, {super.code, super.details});
|
||
|
||
@override
|
||
String toString() => 'PermissionException: $message';
|
||
}
|
||
|
||
/// 业务逻辑异常
|
||
class BusinessException extends AppException {
|
||
const BusinessException(super.message, {super.code, super.details});
|
||
|
||
@override
|
||
String toString() => 'BusinessException: $message';
|
||
}
|
||
|
||
/// 超时异常
|
||
class TimeoutException extends AppException {
|
||
const TimeoutException(super.message, {super.code, super.details});
|
||
|
||
@override
|
||
String toString() => 'TimeoutException: $message';
|
||
}
|
||
|
||
/// 数据解析异常
|
||
class ParseException extends AppException {
|
||
const ParseException(super.message, {super.code, super.details});
|
||
|
||
@override
|
||
String toString() => 'ParseException: $message';
|
||
}
|
||
|
||
/// 通用应用异常
|
||
class GeneralAppException extends AppException {
|
||
const GeneralAppException(super.message, {super.code, super.details});
|
||
|
||
@override
|
||
String toString() => 'GeneralAppException: $message';
|
||
}
|
||
|
||
/// 异常处理工具类
|
||
class ExceptionHandler {
|
||
/// 处理异常并返回用户友好的错误信息
|
||
static String getErrorMessage(dynamic error) {
|
||
if (error is AppException) {
|
||
return error.message;
|
||
} else if (error is Exception) {
|
||
return '发生了未知错误,请稍后重试';
|
||
} else {
|
||
return '系统错误,请联系客服';
|
||
}
|
||
}
|
||
|
||
/// 记录异常
|
||
static void logException(dynamic error, {StackTrace? stackTrace}) {
|
||
// 这里可以集成日志记录服务,如Firebase Crashlytics
|
||
print('Exception: $error');
|
||
if (stackTrace != null) {
|
||
print('StackTrace: $stackTrace');
|
||
}
|
||
}
|
||
|
||
/// 判断是否为网络相关异常
|
||
static bool isNetworkError(dynamic error) {
|
||
return error is NetworkException ||
|
||
error is TimeoutException ||
|
||
(error is AppException && error.code?.contains('network') == true);
|
||
}
|
||
|
||
/// 判断是否为认证相关异常
|
||
static bool isAuthError(dynamic error) {
|
||
return error is AuthException ||
|
||
(error is AppException && error.code?.contains('auth') == true);
|
||
}
|
||
|
||
/// 判断是否为验证相关异常
|
||
static bool isValidationError(dynamic error) {
|
||
return error is ValidationException ||
|
||
(error is AppException && error.code?.contains('validation') == true);
|
||
}
|
||
} |