Files
AAU-Store/lib/utils/request_handler.dart

106 lines
3.3 KiB
Dart

import 'package:dio/dio.dart';
import 'package:hive_flutter/hive_flutter.dart';
import 'package:laundry_seller/config/app_constants.dart';
import 'package:laundry_seller/routes.dart';
import 'package:laundry_seller/utils/global_function.dart';
import 'package:pretty_dio_logger/pretty_dio_logger.dart';
void addApiInterceptors(Dio dio) {
dio.options.connectTimeout = const Duration(seconds: 20);
dio.options.receiveTimeout = const Duration(seconds: 10);
dio.options.headers['Accept'] = 'application/json';
// logger
dio.interceptors.add(PrettyDioLogger(
requestHeader: true,
requestBody: true,
responseBody: true,
responseHeader: false,
error: true,
compact: true,
maxWidth: 90,
));
// respone handler
dio.interceptors.add(
InterceptorsWrapper(
onRequest: (options, handler) {
handler.next(options);
},
onResponse: (response, handler) {
final message = response.data['message'];
switch (response.statusCode) {
case 401:
Box authBox = Hive.box(AppConstants.authBox);
authBox.delete(AppConstants.authToken);
GlobalFunction.navigatorKey.currentState
?.pushNamedAndRemoveUntil(Routes.login, (route) => false);
GlobalFunction.showCustomSnackbar(
message: message,
isSuccess: false,
);
break;
case 302:
case 400:
case 403:
case 404:
case 409:
case 422:
case 500:
GlobalFunction.showCustomSnackbar(
message: message,
isSuccess: false,
);
break;
default:
break;
}
handler.next(response);
},
onError: (error, handler) {
switch (error.type) {
case DioExceptionType.connectionError:
case DioExceptionType.connectionTimeout:
case DioExceptionType.badResponse:
case DioExceptionType.sendTimeout:
case DioExceptionType.receiveTimeout:
case DioExceptionType.unknown:
GlobalFunction.showCustomSnackbar(
message: 'An unknown error occurred',
isSuccess: false,
);
break;
default:
break;
}
if (error.response != null) {
final message = error.response!.data['message'];
final statusCode = error.response!.statusCode;
switch (statusCode) {
case 401:
Box authBox = Hive.box(AppConstants.authBox);
authBox.delete(AppConstants.authToken);
GlobalFunction.navigatorKey.currentState
?.pushNamedAndRemoveUntil(Routes.login, (route) => false);
break;
case 403:
GlobalFunction.showCustomSnackbar(
message: message,
isSuccess: false,
);
break;
default:
GlobalFunction.showCustomSnackbar(
message: message != null
? message.toString()
: 'unexpected error ($statusCode)',
isSuccess: false,
);
break;
}
}
handler.reject(error);
},
),
);
}