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'; final channel = dotenv.env['Channel'] ?? 'OFFICIAL'; if (!isChinaMainland || channel == "GLOBAL_GOOGLE") { return dotenv.env['HW_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()); // 调试:输出请求与响应的详细日志,便于排查服务端创建订单或查询订单问题 dio.interceptors.add(LogInterceptor( request: true, requestHeader: true, requestBody: true, responseHeader: false, responseBody: true, error: true, logPrint: (obj) => print('[DIO] $obj'), )); } // 请求,返回参数为 T // method:请求方法,NWMethod.POST等 // path:请求地址 // params:请求参数 Future request( NWMethod method, String path, { Object? params, Map? queryParameters, }) async { Response response = await dio.request( path, data: params, queryParameters: queryParameters, options: Options(method: nwMethodValues[method]), ); return response.data; } }