config.dart
2.58 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
import 'dart:convert';
import 'package:auto_track/auto_track/utils/track_model.dart';
import 'package:crypto/crypto.dart';
import 'package:flutter/widgets.dart';
import 'package:uuid/uuid.dart';
typedef EventHandlerFunc = void Function(TrackModel);
class AutoTrackConfig {
AutoTrackConfig({
this.host, // 数据上报地址
this.uploadInterval, // 数据上报间隔
this.appKey = '', // 数据上报时根据key和secret生成签名
this.appSecret = '',
this.signature, // 签名生成方法,默认使用sha256对key、时间戳和secret进行签名
this.enableUpload = false, // 开启数据上报
this.trackId, // 埋点ID,默认使用UUID,每次启动时会变化
this.userId, // 用户ID
this.uniqueId,
this.eventHandler, // 事件处理
this.pageConfigs = const [],
this.useCustomRoute = false, // 使用自定义路由
this.ignoreElementKeys = const [], // 忽略key列表
this.ignoreElementStringKeys = const [],
this.enablePageView = true, // 监听页面进入事件
this.enablePageLeave = false, // 监听页面离开事件
this.enableClick = true, // 监听点击事件
this.enableDrag = false, // 监听拖拽事件
this.enableIgnoreNullKey = false, // 忽略空key事件
}) {
trackId ??= const Uuid().v4().replaceAll('-', '');
signature ??= (t) => sha256.convert(utf8.encode('$appKey$t$appSecret')).toString();
}
String? host;
String? appKey;
String? appSecret;
String? trackId;
String? userId;
String? uniqueId;
int? uploadInterval;
Function? signature;
EventHandlerFunc? eventHandler;
List<AutoTrackPageConfig> pageConfigs;
/// 如果使用 MaterialPageRoute/PageRoute/ModalRoute 之外的 Route,
/// 请打开该开关,并保证所有页面都配置在 pageConfigs 中
bool useCustomRoute;
/// 推荐使用 [ElementKey]
List<Key> ignoreElementKeys;
List<String> ignoreElementStringKeys;
Set<Key> getIgnoreElementKeySet() => Set.from(ignoreElementKeys);
Set<String> getIgnoreElementStringKeySet() =>
Set.from(ignoreElementStringKeys);
bool enablePageView;
bool enablePageLeave;
bool enableClick;
bool enableUpload;
bool enableDrag;
bool enableIgnoreNullKey;
}
typedef PageWidgetFunc = bool Function(Widget);
class AutoTrackPageConfig<T extends Widget> {
AutoTrackPageConfig({
this.pageID,
this.pagePath,
this.ignore = false,
this.pageTitle,
this.isPageWidget
}) {
isPageWidget ??= (pageWidget) => pageWidget is T;
}
String? pageID;
String? pagePath;
bool ignore;
String? pageTitle;
PageWidgetFunc? isPageWidget;
}