epoll-j

refactor(auto_track): 替换Dio为HttpClient并调整异常处理

移除了对Dio的依赖,改为使用HttpClient进行网络请求,并更新了异常处理逻辑以适应新的HttpException。同时优化了日志记录的相关配置。
import 'dart:async';
import 'dart:convert';
import 'dart:io';
import 'dart:math';
import 'package:auto_track/auto_track/config/manager.dart';
import 'package:auto_track/auto_track/utils/track_model.dart';
import 'package:dio/dio.dart';
import '../log/logger.dart';
class AutoTrackQueue {
static final AutoTrackQueue instance = AutoTrackQueue._();
AutoTrackQueue._();
Timer? _timer;
final List<TrackModel> _queue = [];
final dio = Dio();
final httpClient = HttpClient();
void appendQueue(TrackModel model) {
if (_timer == null) return;
... ... @@ -48,20 +48,25 @@ class AutoTrackQueue {
}
if (host != null) {
final t = DateTime.now().millisecondsSinceEpoch;
dio.post(host, data: {
'app_key': config.appKey ?? '',
'signature': config.signature!(t),
't': t,
'user_id': config.userId ?? '',
'track_id': config.trackId ?? '',
'unique_id': config.uniqueId ?? AutoTrackConfigManager.instance.deviceId,
'device_id': AutoTrackConfigManager.instance.deviceId,
'data_list': uploadList.map((e) => e.toMap()).toList(),
'app_version': AutoTrackConfigManager.instance.appVersion,
'device_info': AutoTrackConfigManager.instance.deviceInfo
}).onError((error, stackTrace) {
AutoTrackLogger.getInstance().error(error!);
return Future.value(Response(statusCode: 500, requestOptions: RequestOptions(path: host)));
httpClient.postUrl(Uri.parse(host)).then((request) {
request.headers.set(HttpHeaders.contentTypeHeader, 'application/json');
request.write(json.encode({
'app_key': config.appKey ?? '',
'signature': config.signature!(t),
't': t,
'user_id': config.userId ?? '',
'track_id': config.trackId ?? '',
'unique_id': config.uniqueId ?? AutoTrackConfigManager.instance.deviceId,
'device_id': AutoTrackConfigManager.instance.deviceId,
'data_list': uploadList.map((e) => e.toMap()).toList(),
'app_version': AutoTrackConfigManager.instance.appVersion,
'device_info': AutoTrackConfigManager.instance.deviceInfo
}));
return request.close();
}).then((response) {
AutoTrackLogger.getInstance().debug('upload status => ${response.statusCode}');
}).catchError((error) {
AutoTrackLogger.getInstance().error(error);
});
}
}
... ...
import 'package:dio/dio.dart';
import 'dart:io';
import 'package:flutter/widgets.dart';
typedef AutoTrackLoggerHandler = void Function(AutoTrackLoggerLevel level, String message);
... ... @@ -26,8 +27,8 @@ class AutoTrackLogger {
message = e.message;
} else if (e is Error) {
message = e.stackTrace.toString();
} else if (e is DioException) {
message = (e).message ?? 'dio exception with unknown message';
} else if (e is HttpException) {
message = e.message;
}
_print(AutoTrackLoggerLevel.error, message);
}
... ...
... ... @@ -10,7 +10,6 @@ environment:
dependencies:
crypto: ^3.0.3
device_info_plus: ^9.1.2
dio: ^5.4.1
flutter:
sdk: flutter
package_info_plus: ^8.0.1
... ...