addEvent method

void addEvent({
  1. required String code,
  2. required String name,
  3. required EventType type,
  4. int? timestamp,
  5. required String? belongPage,
  6. Map<String, String>? extra,
})

打点

Implementation

void addEvent({
  required String code,
  required String name,
  required EventType type,
  int? timestamp,
  required String? belongPage,
  Map<String, String>? extra,
}) {
  var newTimestamp = timestamp ?? DateTime.now().millisecondsSinceEpoch;
  if (type == EventType.pageIn) {
    // 退出上一个页面
    if (currentPageCode.isNotEmpty) {
      addEvent(
        code: currentPageCode,
        name: _currentPageName,
        type: EventType.pageOut,
        timestamp: newTimestamp - 1,
        belongPage: currentPageCode,
      );
    }
    // 记录新页面
    currentPageCode = code;
    _currentPageName = name;
    _currentPageExtra = extra;
  }

  // Firebase打点
  FirebaseAnalyticTool.addEvent(name: "${code}_${type.firebaseTypeCode}");

  // 接口记录
  recordEvent(
    sessionId: _sessionId,
    eventCode: code,
    eventName: type.eventNamePrefix.replaceAll("@name", name),
    eventType: type,
    timestamp: newTimestamp,
    belongPage: belongPage,
    extra: extra,
    onSuccess: () {},
    onError: () {
      // 记录失败的事件
      var model = AnalyticModel(
        sessionId: _sessionId,
        eventCode: code,
        eventName: name,
        eventType: type,
        timestamp: newTimestamp,
        belongPage: belongPage,
        extra: extra,
      );
      var data = jsonEncode(model);
      var errorModel = AnalyticErrorModel(data: data);
      AnalyticErrorDb.getInstance().then((db) => db.insert(row: errorModel));
    },
  );
}