epoll-j

refactor(AutoTrack): 更新配置管理方式并添加HTTP请求监听

此次重构将各个配置更新方法统一为通过 `AutoTrackConfig` 对象进行更新,并增加了对 HTTP 请求的监听功能。
@@ -123,6 +123,31 @@ class AutoTrackConfig { @@ -123,6 +123,31 @@ class AutoTrackConfig {
123 enableIgnoreNullKey: enableIgnoreNullKey ?? this.enableIgnoreNullKey, 123 enableIgnoreNullKey: enableIgnoreNullKey ?? this.enableIgnoreNullKey,
124 ); 124 );
125 } 125 }
  126 +
  127 + merge(AutoTrackConfig config) {
  128 + return copyWith(
  129 + host: config.host,
  130 + appKey: config.appKey,
  131 + appSecret: config.appSecret,
  132 + trackId: config.trackId,
  133 + userId: config.userId,
  134 + uniqueId: config.uniqueId,
  135 + samplingRate: config.samplingRate,
  136 + uploadInterval: config.uploadInterval,
  137 + signature: config.signature,
  138 + eventHandler: config.eventHandler,
  139 + pageConfigs: config.pageConfigs,
  140 + useCustomRoute: config.useCustomRoute,
  141 + ignoreElementKeys: config.ignoreElementKeys,
  142 + ignoreElementStringKeys: config.ignoreElementStringKeys,
  143 + enablePageView: config.enablePageView,
  144 + enablePageLeave: config.enablePageLeave,
  145 + enableClick: config.enableClick,
  146 + enableUpload: config.enableUpload,
  147 + enableDrag: config.enableDrag,
  148 + enableIgnoreNullKey: config.enableIgnoreNullKey,
  149 + );
  150 + }
126 } 151 }
127 152
128 typedef PageWidgetFunc = bool Function(Widget); 153 typedef PageWidgetFunc = bool Function(Widget);
@@ -36,9 +36,13 @@ class AutoTrackConfigManager { @@ -36,9 +36,13 @@ class AutoTrackConfigManager {
36 bool _autoTrackEnable = false; 36 bool _autoTrackEnable = false;
37 bool get autoTrackEnable => _autoTrackEnable; 37 bool get autoTrackEnable => _autoTrackEnable;
38 38
39 - void updateConfig(AutoTrackConfig config) {  
40 - _config = config; 39 + void setConfig(AutoTrackConfig config) {
  40 + updateConfig(config);
41 _updateDeviceId(); 41 _updateDeviceId();
  42 + }
  43 +
  44 + void updateConfig(AutoTrackConfig config) {
  45 + _config = _config.merge(config);
42 if (config.enableUpload) { 46 if (config.enableUpload) {
43 AutoTrackQueue.instance.start(); 47 AutoTrackQueue.instance.start();
44 } else { 48 } else {
@@ -58,59 +62,10 @@ class AutoTrackConfigManager { @@ -58,59 +62,10 @@ class AutoTrackConfigManager {
58 } 62 }
59 } 63 }
60 64
61 - void updateUserId(String userId) {  
62 - _config.userId = userId;  
63 - }  
64 -  
65 - void updateSampleRate(double rate) {  
66 - _config.samplingRate = rate;  
67 - }  
68 -  
69 - void updatePageConfigs(List<AutoTrackPageConfig> pageConfigs) {  
70 - _config.pageConfigs = pageConfigs;  
71 - }  
72 -  
73 - void updateIgnoreElementKeys(List<Key> ignoreElementKeys) {  
74 - _config.ignoreElementKeys = ignoreElementKeys;  
75 - }  
76 -  
77 - void updateIgnoreElementStringKeys(List<String> ignoreElementStringKeys) {  
78 - _config.ignoreElementStringKeys = ignoreElementStringKeys;  
79 - }  
80 -  
81 - void enablePageView(bool enable) {  
82 - _config.enablePageView = enable;  
83 - }  
84 -  
85 - void enablePageLeave(bool enable) {  
86 - _config.enablePageLeave = enable;  
87 - }  
88 -  
89 - void enableClick(bool enable) {  
90 - _config.enableClick = enable;  
91 - }  
92 -  
93 - void enableDrag(bool enable) {  
94 - _config.enableDrag = enable;  
95 - }  
96 -  
97 void enableAutoTrack(bool enable) { 65 void enableAutoTrack(bool enable) {
98 _autoTrackEnable = enable; 66 _autoTrackEnable = enable;
99 } 67 }
100 68
101 - void enableUpload(bool enable) {  
102 - _config.enableUpload = enable;  
103 - if (enable) {  
104 - AutoTrackQueue.instance.start();  
105 - } else {  
106 - AutoTrackQueue.instance.stop();  
107 - }  
108 - }  
109 -  
110 - void enableIgnoreNullKey(bool enable) {  
111 - _config.enableIgnoreNullKey = enable;  
112 - }  
113 -  
114 List<AutoTrackPageConfig> get pageConfigs => _config.pageConfigs; 69 List<AutoTrackPageConfig> get pageConfigs => _config.pageConfigs;
115 70
116 bool get useCustomRoute => _config.useCustomRoute; 71 bool get useCustomRoute => _config.useCustomRoute;
  1 +import 'dart:io';
  2 +
1 import 'package:flutter/foundation.dart'; 3 import 'package:flutter/foundation.dart';
2 4
3 -import 'listener/click/pointer_event_listener.dart';  
4 import 'config/config.dart'; 5 import 'config/config.dart';
5 import 'config/manager.dart'; 6 import 'config/manager.dart';
  7 +import 'listener/click/pointer_event_listener.dart';
6 import 'listener/drag/drag_pointer_event_listener.dart'; 8 import 'listener/drag/drag_pointer_event_listener.dart';
  9 +import 'listener/request/request_listener.dart';
7 import 'log/logger.dart'; 10 import 'log/logger.dart';
8 11
9 class AutoTrack { 12 class AutoTrack {
@@ -16,98 +19,98 @@ class AutoTrack { @@ -16,98 +19,98 @@ class AutoTrack {
16 } 19 }
17 20
18 void updateUserId(String id) { 21 void updateUserId(String id) {
19 - AutoTrackConfigManager.instance.updateUserId(id); 22 + AutoTrackConfigManager.instance.updateConfig(AutoTrackConfig(userId: id));
20 } 23 }
21 24
22 void updateSampleRate(double rate) { 25 void updateSampleRate(double rate) {
23 - AutoTrackConfigManager.instance.updateSampleRate(rate); 26 + AutoTrackConfigManager.instance.updateConfig(AutoTrackConfig(samplingRate: rate));
24 } 27 }
25 28
26 AutoTrack config(AutoTrackConfig? config) { 29 AutoTrack config(AutoTrackConfig? config) {
27 if (config != null) { 30 if (config != null) {
28 - AutoTrackConfigManager.instance.updateConfig(config); 31 + AutoTrackConfigManager.instance.setConfig(config);
29 } 32 }
30 return _instance; 33 return _instance;
31 } 34 }
32 35
33 AutoTrack pageConfigs(List<AutoTrackPageConfig>? pageConfigs) { 36 AutoTrack pageConfigs(List<AutoTrackPageConfig>? pageConfigs) {
34 if (pageConfigs != null) { 37 if (pageConfigs != null) {
35 - AutoTrackConfigManager.instance.updatePageConfigs(pageConfigs); 38 + AutoTrackConfigManager.instance.updateConfig(AutoTrackConfig(pageConfigs: pageConfigs));
36 } 39 }
37 return _instance; 40 return _instance;
38 } 41 }
39 42
40 AutoTrack ignoreElementKeys(List<Key>? ignoreElementKeys) { 43 AutoTrack ignoreElementKeys(List<Key>? ignoreElementKeys) {
41 if (ignoreElementKeys != null) { 44 if (ignoreElementKeys != null) {
42 - AutoTrackConfigManager.instance.updateIgnoreElementKeys(ignoreElementKeys); 45 + AutoTrackConfigManager.instance.updateConfig(AutoTrackConfig(ignoreElementKeys: ignoreElementKeys));
43 } 46 }
44 return _instance; 47 return _instance;
45 } 48 }
46 49
47 AutoTrack ignoreElementStringKeys(List<String>? ignoreElementStringKeys) { 50 AutoTrack ignoreElementStringKeys(List<String>? ignoreElementStringKeys) {
48 if (ignoreElementStringKeys != null) { 51 if (ignoreElementStringKeys != null) {
49 - AutoTrackConfigManager.instance.updateIgnoreElementStringKeys(ignoreElementStringKeys); 52 + AutoTrackConfigManager.instance.updateConfig(AutoTrackConfig(ignoreElementStringKeys: ignoreElementStringKeys));
50 } 53 }
51 return _instance; 54 return _instance;
52 } 55 }
53 56
54 AutoTrack enablePageView() { 57 AutoTrack enablePageView() {
55 - AutoTrackConfigManager.instance.enablePageView(true); 58 + AutoTrackConfigManager.instance.updateConfig(AutoTrackConfig(enablePageView: true));
56 return _instance; 59 return _instance;
57 } 60 }
58 61
59 AutoTrack disablePageView() { 62 AutoTrack disablePageView() {
60 - AutoTrackConfigManager.instance.enablePageView(false); 63 + AutoTrackConfigManager.instance.updateConfig(AutoTrackConfig(enablePageView: false));
61 return _instance; 64 return _instance;
62 } 65 }
63 66
64 AutoTrack enablePageLeave() { 67 AutoTrack enablePageLeave() {
65 - AutoTrackConfigManager.instance.enablePageLeave(true); 68 + AutoTrackConfigManager.instance.updateConfig(AutoTrackConfig(enablePageLeave: true));
66 return _instance; 69 return _instance;
67 } 70 }
68 71
69 AutoTrack disablePageLeave() { 72 AutoTrack disablePageLeave() {
70 - AutoTrackConfigManager.instance.enablePageLeave(false); 73 + AutoTrackConfigManager.instance.updateConfig(AutoTrackConfig(enablePageLeave: false));
71 return _instance; 74 return _instance;
72 } 75 }
73 76
74 AutoTrack enableIgnoreNullKey() { 77 AutoTrack enableIgnoreNullKey() {
75 - AutoTrackConfigManager.instance.enableIgnoreNullKey(true); 78 + AutoTrackConfigManager.instance.updateConfig(AutoTrackConfig(enableIgnoreNullKey: true));
76 return _instance; 79 return _instance;
77 } 80 }
78 81
79 AutoTrack disableIgnoreNullKey() { 82 AutoTrack disableIgnoreNullKey() {
80 - AutoTrackConfigManager.instance.enableIgnoreNullKey(false); 83 + AutoTrackConfigManager.instance.updateConfig(AutoTrackConfig(enableIgnoreNullKey: false));
81 return _instance; 84 return _instance;
82 } 85 }
83 86
84 AutoTrack enableUpload() { 87 AutoTrack enableUpload() {
85 - AutoTrackConfigManager.instance.enableUpload(true); 88 + AutoTrackConfigManager.instance.updateConfig(AutoTrackConfig(enableUpload: true));
86 return _instance; 89 return _instance;
87 } 90 }
88 91
89 AutoTrack disableUpload() { 92 AutoTrack disableUpload() {
90 - AutoTrackConfigManager.instance.enableUpload(false); 93 + AutoTrackConfigManager.instance.updateConfig(AutoTrackConfig(enableUpload: false));
91 return _instance; 94 return _instance;
92 } 95 }
93 96
94 AutoTrack enableClick() { 97 AutoTrack enableClick() {
95 - AutoTrackConfigManager.instance.enableClick(true); 98 + AutoTrackConfigManager.instance.updateConfig(AutoTrackConfig(enableClick: true));
96 return _instance; 99 return _instance;
97 } 100 }
98 101
99 - AutoTrack enableDrag() {  
100 - AutoTrackConfigManager.instance.enableDrag(true); 102 + AutoTrack disableClick() {
  103 + AutoTrackConfigManager.instance.updateConfig(AutoTrackConfig(enableClick: false));
101 return _instance; 104 return _instance;
102 } 105 }
103 106
104 - AutoTrack disableDrag() {  
105 - AutoTrackConfigManager.instance.enableDrag(true); 107 + AutoTrack enableDrag() {
  108 + AutoTrackConfigManager.instance.updateConfig(AutoTrackConfig(enableDrag: true));
106 return _instance; 109 return _instance;
107 } 110 }
108 111
109 - AutoTrack disableClick() {  
110 - AutoTrackConfigManager.instance.enableClick(false); 112 + AutoTrack disableDrag() {
  113 + AutoTrackConfigManager.instance.updateConfig(AutoTrackConfig(enableDrag: false));
111 return _instance; 114 return _instance;
112 } 115 }
113 116
@@ -136,4 +139,14 @@ class AutoTrack { @@ -136,4 +139,14 @@ class AutoTrack {
136 } 139 }
137 return _instance; 140 return _instance;
138 } 141 }
  142 +
  143 + AutoTrack enableHttpRequest() {
  144 + HttpOverrides.global = AutoTrackHttpOverrides(HttpOverrides.current);
  145 + return _instance;
  146 + }
  147 +
  148 + AutoTrack disableHttpRequest() {
  149 + HttpOverrides.global = null;
  150 + return _instance;
  151 + }
139 } 152 }