Dubhe
Committed by 邝文亮

efactor(auto_track): 优化页面路由和点击信息处理

- 更新 .gitignore 文件,添加新的忽略目录
- 修复点击信息处理中的手动 key 生成逻辑
- 优化异常日志的输出格式
- 重构页面路由观察者,支持自定义路由配置
@@ -5,9 +5,11 @@ @@ -5,9 +5,11 @@
5 *.swp 5 *.swp
6 .DS_Store 6 .DS_Store
7 .atom/ 7 .atom/
  8 +.build/
8 .buildlog/ 9 .buildlog/
9 .history 10 .history
10 .svn/ 11 .svn/
  12 +.swiftpm/
11 migrate_working_dir/ 13 migrate_working_dir/
12 14
13 # IntelliJ related 15 # IntelliJ related
@@ -31,7 +31,7 @@ class ClickInfo { @@ -31,7 +31,7 @@ class ClickInfo {
31 clickInfo._texts = ElementUtil.findTexts(element); 31 clickInfo._texts = ElementUtil.findTexts(element);
32 Key? key = element.widget.key; 32 Key? key = element.widget.key;
33 if (key != null && key is ValueKey) { 33 if (key != null && key is ValueKey) {
34 - clickInfo._elementManualKey = (key).value; 34 + clickInfo._elementManualKey = '${(key).value}';
35 } else { 35 } else {
36 clickInfo._elementManualKey = key?.toString() ?? md5.convert(utf8.encode('${clickInfo._elementType}${clickInfo._elementPath}')).toString(); 36 clickInfo._elementManualKey = key?.toString() ?? md5.convert(utf8.encode('${clickInfo._elementType}${clickInfo._elementPath}')).toString();
37 } 37 }
@@ -8,7 +8,8 @@ import '../../utils/element_util.dart'; @@ -8,7 +8,8 @@ import '../../utils/element_util.dart';
8 import 'page_stack.dart'; 8 import 'page_stack.dart';
9 9
10 class AutoTrackNavigationObserver extends NavigatorObserver { 10 class AutoTrackNavigationObserver extends NavigatorObserver {
11 - static List<NavigatorObserver> wrap(List<NavigatorObserver>? navigatorObservers) { 11 + static List<NavigatorObserver> wrap(
  12 + List<NavigatorObserver>? navigatorObservers) {
12 if (navigatorObservers == null) { 13 if (navigatorObservers == null) {
13 return [AutoTrackNavigationObserver()]; 14 return [AutoTrackNavigationObserver()];
14 } 15 }
@@ -32,7 +33,8 @@ class AutoTrackNavigationObserver extends NavigatorObserver { @@ -32,7 +33,8 @@ class AutoTrackNavigationObserver extends NavigatorObserver {
32 return navigatorObservers; 33 return navigatorObservers;
33 } 34 }
34 35
35 - static List<NavigatorObserver> defaultNavigatorObservers() => [AutoTrackNavigationObserver()]; 36 + static List<NavigatorObserver> defaultNavigatorObservers() =>
  37 + [AutoTrackNavigationObserver()];
36 38
37 @override 39 @override
38 void didPop(Route route, Route? previousRoute) { 40 void didPop(Route route, Route? previousRoute) {
@@ -86,32 +88,35 @@ class AutoTrackNavigationObserver extends NavigatorObserver { @@ -86,32 +88,35 @@ class AutoTrackNavigationObserver extends NavigatorObserver {
86 88
87 void _findElement(Route route, Function(Element) callback) { 89 void _findElement(Route route, Function(Element) callback) {
88 SchedulerBinding.instance?.addPostFrameCallback((_) { 90 SchedulerBinding.instance?.addPostFrameCallback((_) {
89 - if (route is ModalRoute) {  
90 - ModalRoute pageRoute = route;  
91 - ElementUtil.walk(pageRoute.subtreeContext, (element, parent) {  
92 - if (parent != null && parent.widget is Semantics) {  
93 - callback(element);  
94 - return false;  
95 - }  
96 - return true;  
97 - });  
98 - } else if (AutoTrackConfigManager.instance.useCustomRoute) {  
99 - List<AutoTrackPageConfig> pageConfigs = AutoTrackConfigManager.instance.pageConfigs; 91 + if (AutoTrackConfigManager.instance.useCustomRoute) {
  92 + List<AutoTrackPageConfig> pageConfigs =
  93 + AutoTrackConfigManager.instance.pageConfigs;
100 if (pageConfigs.isEmpty) { 94 if (pageConfigs.isEmpty) {
101 return; 95 return;
102 } 96 }
103 97
104 - Element? lastPageElement; 98 + Element? pageElement;
105 ElementUtil.walk(route.navigator?.context, (element, parent) { 99 ElementUtil.walk(route.navigator?.context, (element, parent) {
106 - if (pageConfigs.last.isPageWidget!(element.widget)) {  
107 - lastPageElement = element;  
108 - return false; 100 + for (var config in pageConfigs) {
  101 + if (config.isPageWidget!(element.widget)) {
  102 + pageElement = element;
  103 + return false;
  104 + }
109 } 105 }
110 return true; 106 return true;
111 }); 107 });
112 - if (lastPageElement != null) {  
113 - callback(lastPageElement!); 108 + if (pageElement != null) {
  109 + callback(pageElement!);
114 } 110 }
  111 + } else if (route is ModalRoute) {
  112 + ModalRoute pageRoute = route;
  113 + ElementUtil.walk(pageRoute.subtreeContext, (element, parent) {
  114 + if (parent != null && parent.widget is Semantics) {
  115 + callback(element);
  116 + return false;
  117 + }
  118 + return true;
  119 + });
115 } 120 }
116 }); 121 });
117 } 122 }
@@ -30,7 +30,7 @@ class AutoTrackLogger { @@ -30,7 +30,7 @@ class AutoTrackLogger {
30 } else if (e is HttpException) { 30 } else if (e is HttpException) {
31 message = e.message; 31 message = e.message;
32 } 32 }
33 - _print(AutoTrackLoggerLevel.error, message); 33 + _print(AutoTrackLoggerLevel.error, '$e \n $message');
34 } 34 }
35 35
36 void setHandler(AutoTrackLoggerHandler handler) { 36 void setHandler(AutoTrackLoggerHandler handler) {