import 'package:dio/dio.dart'; import 'package:flutter/material.dart'; import 'package:get/get.dart'; import 'package:get_storage/get_storage.dart'; class HttpConfig { static final Dio dio = Dio(BaseOptions( // baseUrl: 'http://43.143.227.203:8099', // baseUrl: 'http://111.62.22.190:8080', // baseUrl: 'http://cjh.wuzhongjie.com.cn', baseUrl: 'http://82.156.121.2:8880', // baseUrl: 'http://192.168.1.65:8880', // baseUrl: 'http://192.168.1.22:8080', // connectTimeout: Duration(seconds: 30), // receiveTimeout: Duration(seconds: 30), connectTimeout: const Duration(seconds: 30), // 建立连接超时 receiveTimeout: const Duration(seconds: 300), // 接收响应超时(下载) sendTimeout: const Duration(minutes: 10), // 发送请求超时(上传) )); static final box = GetStorage(); static void init() { dio.interceptors.add( InterceptorsWrapper( onRequest: (options, handler) { // Token String? token = box.read('token'); print('Bearer $token'); if (token != null) { options.headers['Authorization'] = 'Bearer $token'; } // Content-Type 动态处理(默认 json) if (options.extra['contentType'] != null) { options.headers['Content-Type'] = options.extra['contentType']; } else { options.headers['Content-Type'] = 'application/json'; } handler.next(options); }, onResponse: (response, handler) { // logger.e(response.requestOptions.data); final data = response.data; if (data is Map) { if (data['code'] != 200) { Get.snackbar( '错误码${data['code']}', '${response.requestOptions.uri}\n${response.requestOptions.data}\n${data['msg']}' ?? '请求失败', duration: Duration(minutes: 1), backgroundColor: Colors.red.withAlpha(230), colorText: Colors.white, icon: const Icon(Icons.error_outline, color: Colors.white), ); return handler.reject( DioException( requestOptions: response.requestOptions, error: data['msg'], response: response, ), ); } } handler.next(response); }, onError: (e, handler) { // 网络异常处理 Get.snackbar( '网络异常', e.message ?? '未知错误', backgroundColor: Colors.red.withAlpha(230), colorText: Colors.white, icon: const Icon(Icons.error_outline, color: Colors.white), ); handler.next(e); }, ), ); } }