You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
57 lines
1.5 KiB
57 lines
1.5 KiB
import 'package:dio/dio.dart';
|
|
import 'package:flutter_dotenv/flutter_dotenv.dart';
|
|
import 'package:get/get.dart' hide Response;
|
|
|
|
import 'auth_interceptor.dart';
|
|
import 'nw_method.dart';
|
|
|
|
class DioManager {
|
|
static final DioManager _shared = DioManager._internal();
|
|
factory DioManager() => _shared;
|
|
|
|
late Dio dio;
|
|
// 根据地区获取服务器URL
|
|
String get baseUrl {
|
|
final countryCode = Get.deviceLocale?.countryCode?.toUpperCase();
|
|
final isChinaMainland = countryCode == 'CN';
|
|
|
|
if (!isChinaMainland) {
|
|
return dotenv.env['HW_SERVER_URL'] ?? dotenv.env['SERVER_URL'] ?? '';
|
|
} else {
|
|
return dotenv.env['SERVER_URL'] ?? '';
|
|
}
|
|
}
|
|
|
|
DioManager._internal() {
|
|
BaseOptions options = BaseOptions(
|
|
baseUrl: baseUrl,
|
|
contentType: Headers.jsonContentType,
|
|
responseType: ResponseType.json,
|
|
connectTimeout: const Duration(seconds: 30),
|
|
receiveTimeout: const Duration(seconds: 30),
|
|
);
|
|
|
|
dio = Dio(options);
|
|
|
|
dio.interceptors.add(AuthInterceptor());
|
|
}
|
|
|
|
// 请求,返回参数为 T
|
|
// method:请求方法,NWMethod.POST等
|
|
// path:请求地址
|
|
// params:请求参数
|
|
Future request<T>(
|
|
NWMethod method,
|
|
String path, {
|
|
Object? params,
|
|
Map<String, dynamic>? queryParameters,
|
|
}) async {
|
|
Response response = await dio.request(
|
|
path,
|
|
data: params,
|
|
queryParameters: queryParameters,
|
|
options: Options(method: nwMethodValues[method]),
|
|
);
|
|
return response.data;
|
|
}
|
|
}
|
|
|