epoll-j

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

移除了对Dio的依赖,改为使用HttpClient进行网络请求,并更新了异常处理逻辑以适应新的HttpException。同时优化了日志记录的相关配置。
1 import 'dart:async'; 1 import 'dart:async';
  2 +import 'dart:convert';
  3 +import 'dart:io';
2 import 'dart:math'; 4 import 'dart:math';
3 5
4 import 'package:auto_track/auto_track/config/manager.dart'; 6 import 'package:auto_track/auto_track/config/manager.dart';
5 import 'package:auto_track/auto_track/utils/track_model.dart'; 7 import 'package:auto_track/auto_track/utils/track_model.dart';
6 -import 'package:dio/dio.dart';  
7 8
8 import '../log/logger.dart'; 9 import '../log/logger.dart';
9 10
10 11
11 -  
12 class AutoTrackQueue { 12 class AutoTrackQueue {
13 static final AutoTrackQueue instance = AutoTrackQueue._(); 13 static final AutoTrackQueue instance = AutoTrackQueue._();
14 AutoTrackQueue._(); 14 AutoTrackQueue._();
15 15
16 Timer? _timer; 16 Timer? _timer;
17 final List<TrackModel> _queue = []; 17 final List<TrackModel> _queue = [];
18 - final dio = Dio(); 18 + final httpClient = HttpClient();
19 19
20 void appendQueue(TrackModel model) { 20 void appendQueue(TrackModel model) {
21 if (_timer == null) return; 21 if (_timer == null) return;
@@ -48,7 +48,9 @@ class AutoTrackQueue { @@ -48,7 +48,9 @@ class AutoTrackQueue {
48 } 48 }
49 if (host != null) { 49 if (host != null) {
50 final t = DateTime.now().millisecondsSinceEpoch; 50 final t = DateTime.now().millisecondsSinceEpoch;
51 - dio.post(host, data: { 51 + httpClient.postUrl(Uri.parse(host)).then((request) {
  52 + request.headers.set(HttpHeaders.contentTypeHeader, 'application/json');
  53 + request.write(json.encode({
52 'app_key': config.appKey ?? '', 54 'app_key': config.appKey ?? '',
53 'signature': config.signature!(t), 55 'signature': config.signature!(t),
54 't': t, 56 't': t,
@@ -59,9 +61,12 @@ class AutoTrackQueue { @@ -59,9 +61,12 @@ class AutoTrackQueue {
59 'data_list': uploadList.map((e) => e.toMap()).toList(), 61 'data_list': uploadList.map((e) => e.toMap()).toList(),
60 'app_version': AutoTrackConfigManager.instance.appVersion, 62 'app_version': AutoTrackConfigManager.instance.appVersion,
61 'device_info': AutoTrackConfigManager.instance.deviceInfo 63 'device_info': AutoTrackConfigManager.instance.deviceInfo
62 - }).onError((error, stackTrace) {  
63 - AutoTrackLogger.getInstance().error(error!);  
64 - return Future.value(Response(statusCode: 500, requestOptions: RequestOptions(path: host))); 64 + }));
  65 + return request.close();
  66 + }).then((response) {
  67 + AutoTrackLogger.getInstance().debug('upload status => ${response.statusCode}');
  68 + }).catchError((error) {
  69 + AutoTrackLogger.getInstance().error(error);
65 }); 70 });
66 } 71 }
67 } 72 }
1 -import 'package:dio/dio.dart'; 1 +import 'dart:io';
  2 +
2 import 'package:flutter/widgets.dart'; 3 import 'package:flutter/widgets.dart';
3 4
4 typedef AutoTrackLoggerHandler = void Function(AutoTrackLoggerLevel level, String message); 5 typedef AutoTrackLoggerHandler = void Function(AutoTrackLoggerLevel level, String message);
@@ -26,8 +27,8 @@ class AutoTrackLogger { @@ -26,8 +27,8 @@ class AutoTrackLogger {
26 message = e.message; 27 message = e.message;
27 } else if (e is Error) { 28 } else if (e is Error) {
28 message = e.stackTrace.toString(); 29 message = e.stackTrace.toString();
29 - } else if (e is DioException) {  
30 - message = (e).message ?? 'dio exception with unknown message'; 30 + } else if (e is HttpException) {
  31 + message = e.message;
31 } 32 }
32 _print(AutoTrackLoggerLevel.error, message); 33 _print(AutoTrackLoggerLevel.error, message);
33 } 34 }
@@ -10,7 +10,6 @@ environment: @@ -10,7 +10,6 @@ environment:
10 dependencies: 10 dependencies:
11 crypto: ^3.0.3 11 crypto: ^3.0.3
12 device_info_plus: ^9.1.2 12 device_info_plus: ^9.1.2
13 - dio: ^5.4.1  
14 flutter: 13 flutter:
15 sdk: flutter 14 sdk: flutter
16 package_info_plus: ^8.0.1 15 package_info_plus: ^8.0.1