config.dart
1.83 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
import 'dart:convert';
import 'package:crypto/crypto.dart';
import 'package:flutter/widgets.dart';
import 'package:uuid/uuid.dart';
class AutoTrackConfig {
AutoTrackConfig({
this.host,
this.appKey = '',
this.appSecret = '',
this.trackId,
this.userId,
this.signature,
this.pageConfigs = const [],
this.useCustomRoute = false,
this.ignoreElementKeys = const [],
this.ignoreElementStringKeys = const [],
this.enablePageView = true,
this.enablePageLeave = false,
this.enableClick = true,
this.enableUpload = false
}) {
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;
Function? signature;
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;
}
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;
// bool isPageWidget(Widget pageWidget) => pageWidget is T;
}