155 lines
3.6 KiB
Dart
155 lines
3.6 KiB
Dart
import 'package:dio/dio.dart';
|
|
|
|
class AppRequest {
|
|
|
|
static const Duration defaultTimeout = Duration(seconds: 15);
|
|
static final AppRequest instance = AppRequest();
|
|
final Dio dio;
|
|
|
|
AppRequest({
|
|
Dio? dio,
|
|
String baseUrl = '',
|
|
Duration connectTimeout = defaultTimeout,
|
|
Duration sendTimeout = defaultTimeout,
|
|
Duration receiveTimeout = defaultTimeout,
|
|
}) : dio =
|
|
dio ??
|
|
Dio(
|
|
BaseOptions(
|
|
baseUrl: baseUrl,
|
|
connectTimeout: connectTimeout,
|
|
sendTimeout: sendTimeout,
|
|
receiveTimeout: receiveTimeout,
|
|
responseType: ResponseType.json,
|
|
),
|
|
);
|
|
|
|
|
|
|
|
void setBaseUrl(String baseUrl) {
|
|
dio.options.baseUrl = baseUrl;
|
|
}
|
|
|
|
void setHeader(String key, Object? value) {
|
|
dio.options.headers[key] = value;
|
|
}
|
|
|
|
void removeHeader(String key) {
|
|
dio.options.headers.remove(key);
|
|
}
|
|
|
|
void setToken(String token, {String prefix = 'Bearer'}) {
|
|
final value = prefix.isEmpty ? token : '$prefix $token';
|
|
setHeader('Authorization', value);
|
|
}
|
|
|
|
void clearToken() {
|
|
removeHeader('Authorization');
|
|
}
|
|
|
|
Future<T?> get<T>(
|
|
String path, {
|
|
Map<String, dynamic>? queryParameters,
|
|
Options? options,
|
|
CancelToken? cancelToken,
|
|
ProgressCallback? onReceiveProgress,
|
|
}) {
|
|
return request<T>(
|
|
path,
|
|
method: 'GET',
|
|
queryParameters: queryParameters,
|
|
options: options,
|
|
cancelToken: cancelToken,
|
|
onReceiveProgress: onReceiveProgress,
|
|
);
|
|
}
|
|
|
|
Future<T?> post<T>(
|
|
String path, {
|
|
Object? data,
|
|
Map<String, dynamic>? queryParameters,
|
|
Options? options,
|
|
CancelToken? cancelToken,
|
|
ProgressCallback? onSendProgress,
|
|
ProgressCallback? onReceiveProgress,
|
|
}) {
|
|
return request<T>(
|
|
path,
|
|
method: 'POST',
|
|
data: data,
|
|
queryParameters: queryParameters,
|
|
options: options,
|
|
cancelToken: cancelToken,
|
|
onSendProgress: onSendProgress,
|
|
onReceiveProgress: onReceiveProgress,
|
|
);
|
|
}
|
|
|
|
Future<T?> put<T>(
|
|
String path, {
|
|
Object? data,
|
|
Map<String, dynamic>? queryParameters,
|
|
Options? options,
|
|
CancelToken? cancelToken,
|
|
ProgressCallback? onSendProgress,
|
|
ProgressCallback? onReceiveProgress,
|
|
}) {
|
|
return request<T>(
|
|
path,
|
|
method: 'PUT',
|
|
data: data,
|
|
queryParameters: queryParameters,
|
|
options: options,
|
|
cancelToken: cancelToken,
|
|
onSendProgress: onSendProgress,
|
|
onReceiveProgress: onReceiveProgress,
|
|
);
|
|
}
|
|
|
|
Future<T?> delete<T>(
|
|
String path, {
|
|
Object? data,
|
|
Map<String, dynamic>? queryParameters,
|
|
Options? options,
|
|
CancelToken? cancelToken,
|
|
}) {
|
|
return request<T>(
|
|
path,
|
|
method: 'DELETE',
|
|
data: data,
|
|
queryParameters: queryParameters,
|
|
options: options,
|
|
cancelToken: cancelToken,
|
|
);
|
|
}
|
|
|
|
Future<T?> request<T>(
|
|
String path, {
|
|
required String method,
|
|
Object? data,
|
|
Map<String, dynamic>? queryParameters,
|
|
Options? options,
|
|
CancelToken? cancelToken,
|
|
ProgressCallback? onSendProgress,
|
|
ProgressCallback? onReceiveProgress,
|
|
}) async {
|
|
final response = await dio.request<T>(
|
|
path,
|
|
data: data,
|
|
queryParameters: queryParameters,
|
|
options: _withMethod(options, method),
|
|
cancelToken: cancelToken,
|
|
onSendProgress: onSendProgress,
|
|
onReceiveProgress: onReceiveProgress,
|
|
);
|
|
|
|
return response.data;
|
|
}
|
|
|
|
Options _withMethod(Options? options, String method) {
|
|
return options == null
|
|
? Options(method: method)
|
|
: options.copyWith(method: method);
|
|
}
|
|
}
|