mirror of
https://github.com/HChaZZY/PiliPlus.git
synced 2025-12-06 09:13:48 +08:00
89 lines
3.3 KiB
Dart
89 lines
3.3 KiB
Dart
import 'package:connectivity_plus/connectivity_plus.dart';
|
|
import 'package:dio/dio.dart';
|
|
import 'package:flutter/material.dart';
|
|
import 'package:flutter_smart_dialog/flutter_smart_dialog.dart';
|
|
|
|
class ApiInterceptor extends Interceptor {
|
|
// @override
|
|
// void onRequest(RequestOptions options, RequestInterceptorHandler handler) {
|
|
// debugPrint("请求之前");
|
|
// // 在请求之前添加头部或认证信息
|
|
// options.headers['Authorization'] = 'Bearer token';
|
|
// options.headers['Content-Type'] = 'application/json';
|
|
// handler.next(options);
|
|
// }
|
|
|
|
// @override
|
|
// void onResponse(Response response, ResponseInterceptorHandler handler) {
|
|
// try {
|
|
// if (response.statusCode == 302) {
|
|
// final List<String> locations = response.headers['location']!;
|
|
// if (locations.isNotEmpty) {
|
|
// if (locations.first.startsWith('https://www.mcbbs.net')) {
|
|
// debugPrint('ApiInterceptor@@@@@: ${locations.first}');
|
|
// final Uri uri = Uri.parse(locations.first);
|
|
// final String? accessKey = uri.queryParameters['access_key'];
|
|
// final String? mid = uri.queryParameters['mid'];
|
|
// try {
|
|
// GStorage.localCache.put(LocalCacheKey.accessKey,
|
|
// <String, String?>{'mid': mid, 'value': accessKey});
|
|
// } catch (_) {}
|
|
// }
|
|
// }
|
|
// }
|
|
// } catch (err) {
|
|
// debugPrint('ApiInterceptor: $err');
|
|
// }
|
|
|
|
// handler.next(response);
|
|
// }
|
|
|
|
@override
|
|
void onError(DioException err, ErrorInterceptorHandler handler) async {
|
|
// 处理网络请求错误
|
|
// handler.next(err);
|
|
String url = err.requestOptions.uri.toString();
|
|
debugPrint('🌹🌹ApiInterceptor: $url');
|
|
// 屏蔽弹幕、心跳、人数请求的错误提示
|
|
if (!url.contains('heartbeat') &&
|
|
!url.contains('seg.so') &&
|
|
!url.contains('online/total') &&
|
|
!url.contains('github') &&
|
|
(!url.contains('skipSegments') && err.requestOptions.method != 'GET')) {
|
|
SmartDialog.showToast(
|
|
await dioError(err) + url,
|
|
displayType: SmartToastType.onlyRefresh,
|
|
displayTime: const Duration(milliseconds: 1200),
|
|
);
|
|
}
|
|
super.onError(err, handler);
|
|
}
|
|
|
|
static Future<String> dioError(DioException error) async {
|
|
switch (error.type) {
|
|
case DioExceptionType.badCertificate:
|
|
return '证书有误!';
|
|
case DioExceptionType.badResponse:
|
|
return '服务器异常,请稍后重试!';
|
|
case DioExceptionType.cancel:
|
|
return '请求已被取消,请重新请求';
|
|
case DioExceptionType.connectionError:
|
|
return '连接错误,请检查网络设置';
|
|
case DioExceptionType.connectionTimeout:
|
|
return '网络连接超时,请检查网络设置';
|
|
case DioExceptionType.receiveTimeout:
|
|
return '响应超时,请稍后重试!';
|
|
case DioExceptionType.sendTimeout:
|
|
return '发送请求超时,请检查网络设置';
|
|
case DioExceptionType.unknown:
|
|
final String res =
|
|
(await Connectivity().checkConnectivity()).first.title;
|
|
return '$res网络异常 ${error.error}';
|
|
}
|
|
}
|
|
}
|
|
|
|
extension _ConnectivityResultExt on ConnectivityResult {
|
|
String get title => ['蓝牙', 'Wi-Fi', '局域', '流量', '无', '代理', '其他'][index];
|
|
}
|