together_mobile/lib/request/server.dart

54 lines
1.6 KiB
Dart

import 'package:dio/dio.dart';
import 'package:flutter_dotenv/flutter_dotenv.dart';
import '/models/init_get_it.dart';
import '/models/token_model.dart';
final baseUrl = dotenv.env['SERVER_HOST'];
final userAvatarsUrl = '$baseUrl/static/avatars/user';
final groupChatAvatarsUrl = '$baseUrl/static/avatars/group_chat';
final baseOptions = BaseOptions(
baseUrl: baseUrl!,
connectTimeout: const Duration(seconds: 5),
receiveTimeout: const Duration(seconds: 5),
);
var request = Dio(baseOptions)
..interceptors.add(
InterceptorsWrapper(
onRequest: (
RequestOptions options,
RequestInterceptorHandler handler,
) async {
if (getIt.get<Token>().token != '') {
options.headers['Authorization'] =
'Bearer ${getIt.get<Token>().token}';
}
return handler.next(options);
},
onResponse: (Response response, ResponseInterceptorHandler handler) {
if (response.statusCode! >= 200 && response.statusCode! < 400) {
if (response.headers.value('Authorization') != null) {
// update token
getIt
.get<Token>()
.updateToken(response.headers.value('Authorization')!);
}
return handler.resolve(response);
} else {
handler.reject(
DioException.badResponse(
statusCode: response.statusCode!,
requestOptions: RequestOptions(),
response: response,
),
);
}
},
onError: (DioException e, ErrorInterceptorHandler handler) {
handler.reject(e);
},
),
);