Dubhe
Committed by 邝文亮

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

- 更新 .gitignore 文件,添加新的忽略目录
- 修复点击信息处理中的手动 key 生成逻辑
- 优化异常日志的输出格式
- 重构页面路由观察者,支持自定义路由配置
... ... @@ -5,9 +5,11 @@
*.swp
.DS_Store
.atom/
.build/
.buildlog/
.history
.svn/
.swiftpm/
migrate_working_dir/
# IntelliJ related
... ...
... ... @@ -31,7 +31,7 @@ class ClickInfo {
clickInfo._texts = ElementUtil.findTexts(element);
Key? key = element.widget.key;
if (key != null && key is ValueKey) {
clickInfo._elementManualKey = (key).value;
clickInfo._elementManualKey = '${(key).value}';
} else {
clickInfo._elementManualKey = key?.toString() ?? md5.convert(utf8.encode('${clickInfo._elementType}${clickInfo._elementPath}')).toString();
}
... ...
... ... @@ -8,7 +8,8 @@ import '../../utils/element_util.dart';
import 'page_stack.dart';
class AutoTrackNavigationObserver extends NavigatorObserver {
static List<NavigatorObserver> wrap(List<NavigatorObserver>? navigatorObservers) {
static List<NavigatorObserver> wrap(
List<NavigatorObserver>? navigatorObservers) {
if (navigatorObservers == null) {
return [AutoTrackNavigationObserver()];
}
... ... @@ -32,7 +33,8 @@ class AutoTrackNavigationObserver extends NavigatorObserver {
return navigatorObservers;
}
static List<NavigatorObserver> defaultNavigatorObservers() => [AutoTrackNavigationObserver()];
static List<NavigatorObserver> defaultNavigatorObservers() =>
[AutoTrackNavigationObserver()];
@override
void didPop(Route route, Route? previousRoute) {
... ... @@ -86,32 +88,35 @@ class AutoTrackNavigationObserver extends NavigatorObserver {
void _findElement(Route route, Function(Element) callback) {
SchedulerBinding.instance?.addPostFrameCallback((_) {
if (route is ModalRoute) {
ModalRoute pageRoute = route;
ElementUtil.walk(pageRoute.subtreeContext, (element, parent) {
if (parent != null && parent.widget is Semantics) {
callback(element);
return false;
}
return true;
});
} else if (AutoTrackConfigManager.instance.useCustomRoute) {
List<AutoTrackPageConfig> pageConfigs = AutoTrackConfigManager.instance.pageConfigs;
if (AutoTrackConfigManager.instance.useCustomRoute) {
List<AutoTrackPageConfig> pageConfigs =
AutoTrackConfigManager.instance.pageConfigs;
if (pageConfigs.isEmpty) {
return;
}
Element? lastPageElement;
Element? pageElement;
ElementUtil.walk(route.navigator?.context, (element, parent) {
if (pageConfigs.last.isPageWidget!(element.widget)) {
lastPageElement = element;
return false;
for (var config in pageConfigs) {
if (config.isPageWidget!(element.widget)) {
pageElement = element;
return false;
}
}
return true;
});
if (lastPageElement != null) {
callback(lastPageElement!);
if (pageElement != null) {
callback(pageElement!);
}
} else if (route is ModalRoute) {
ModalRoute pageRoute = route;
ElementUtil.walk(pageRoute.subtreeContext, (element, parent) {
if (parent != null && parent.widget is Semantics) {
callback(element);
return false;
}
return true;
});
}
});
}
... ...
... ... @@ -30,7 +30,7 @@ class AutoTrackLogger {
} else if (e is HttpException) {
message = e.message;
}
_print(AutoTrackLoggerLevel.error, message);
_print(AutoTrackLoggerLevel.error, '$e \n $message');
}
void setHandler(AutoTrackLoggerHandler handler) {
... ...