Skip to content

Instantly share code, notes, and snippets.

@oyewalekehinde
Created November 2, 2024 23:47
Show Gist options
  • Select an option

  • Save oyewalekehinde/623375425fd3c557adee0e747ad53a2f to your computer and use it in GitHub Desktop.

Select an option

Save oyewalekehinde/623375425fd3c557adee0e747ad53a2f to your computer and use it in GitHub Desktop.
httpservice
class HttpService {
Dio? _dio;
final String baseUrl;
final bool hasAuthorization;
final bool isFormType;
HttpService(
{required this.baseUrl,
this.hasAuthorization = false,
this.isFormType = false}) {
_dio = Dio(BaseOptions(
baseUrl: baseUrl,
connectTimeout: const Duration(seconds: 10),
receiveTimeout: const Duration(seconds: 8),
));
_interceptorsInit();
}
static const int timeoutDuration = 1;
Future<Response> getRequest(
urlEndPoint, {
Map<String, dynamic>? queryParameters,
}) async {
Response response;
if (kDebugMode) log(urlEndPoint);
response = await _dio!
.get(urlEndPoint, queryParameters: queryParameters)
.timeout(const Duration(minutes: timeoutDuration));
if(response.statusCode==401){
}
return response;
}
Future<Response> post(
urlEndpoint, {
data,
Map<String, dynamic>? queryParameters,
}) async {
Response response;
if (kDebugMode) log(urlEndpoint.toString());
response = await _dio!
.post(urlEndpoint, data: data, queryParameters: queryParameters)
.timeout(const Duration(minutes: timeoutDuration));
return response;
}
Future<Response> put(urlEndpoint,
{data, Map<String, dynamic>? queryParameters}) async {
Response response;
response = await _dio!
.put(urlEndpoint, data: data, queryParameters: queryParameters)
.timeout(const Duration(minutes: timeoutDuration));
return response;
}
Future<Response> delete(urlEndpoint,
{data, Map<String, dynamic>? queryParameters}) async {
Response response;
response = await _dio!
.delete(urlEndpoint, data: data, queryParameters: queryParameters)
.timeout(const Duration(minutes: timeoutDuration));
return response;
}
Future<Response> patch(urlEndpoint,
{data, Map<String, dynamic>? queryParameters}) async {
Response response;
response = await _dio!
.patch(urlEndpoint, data: data, queryParameters: queryParameters)
.timeout(const Duration(minutes: timeoutDuration));
return response;
}
_interceptorsInit() {
_dio!.interceptors.add(HeaderInterceptor(
hasToken: hasAuthorization,
dio: _dio!,
contentType: isFormType
? HeaderContentType.formType
: HeaderContentType.jsonType));
}
}
@oyewalekehinde
Copy link
Author

if (response.statusCode == 401 || response.statusCode == 403) {
      // call refresh token function
      try {
        final refreshResponse = await _dio!.get(
          'https://api.example.com/refresh',
          data: {'refresh_token': ""},
        );
        if (response.statusCode == 200) {
          final newAccessToken = response.data['access_token'];
          await UserTokenManager.insertAccessToken(newAccessToken);
          Response newResponse = await _dio!
              .get(urlEndPoint, queryParameters: queryParameters)
              .timeout(const Duration(minutes: timeoutDuration));
          response = newResponse;
        }
      } catch (e) {
        throw Exception();
      }
    }

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment