crashlytic interceptro
This commit is contained in:
@@ -0,0 +1,51 @@
|
||||
import 'package:dio/dio.dart';
|
||||
import 'package:firebase_crashlytics/firebase_crashlytics.dart';
|
||||
|
||||
class CrashlyticsInterceptor extends Interceptor {
|
||||
@override
|
||||
void onError(DioException err, ErrorInterceptorHandler handler) {
|
||||
// Log semua error ke Crashlytics
|
||||
FirebaseCrashlytics.instance.recordError(
|
||||
err,
|
||||
err.stackTrace,
|
||||
reason: _getErrorReason(err),
|
||||
information: _getErrorInformation(err),
|
||||
fatal: false,
|
||||
);
|
||||
|
||||
super.onError(err, handler);
|
||||
}
|
||||
|
||||
String _getErrorReason(DioException err) {
|
||||
final statusCode = err.response?.statusCode;
|
||||
|
||||
if (statusCode != null) {
|
||||
return 'HTTP $statusCode Error: ${err.requestOptions.uri.path}';
|
||||
}
|
||||
|
||||
switch (err.type) {
|
||||
case DioExceptionType.connectionTimeout:
|
||||
return 'Connection Timeout';
|
||||
case DioExceptionType.sendTimeout:
|
||||
return 'Send Timeout';
|
||||
case DioExceptionType.receiveTimeout:
|
||||
return 'Receive Timeout';
|
||||
case DioExceptionType.connectionError:
|
||||
return 'Connection Error';
|
||||
case DioExceptionType.cancel:
|
||||
return 'Request Cancelled';
|
||||
default:
|
||||
return 'Network Error: ${err.type.name}';
|
||||
}
|
||||
}
|
||||
|
||||
List<String> _getErrorInformation(DioException err) {
|
||||
return [
|
||||
'URL: ${err.requestOptions.uri}',
|
||||
'Method: ${err.requestOptions.method}',
|
||||
'Status Code: ${err.response?.statusCode ?? 'N/A'}',
|
||||
'Error Type: ${err.type.name}',
|
||||
'Message: ${err.message ?? 'No message'}',
|
||||
];
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user