trackError method

Future<void> trackError(
  1. Object error,
  2. String? componentName,
  3. Map<String, dynamic>? additionalInfo
)

Implementation

Future<void> trackError(
  Object error,
  String? componentName,
  Map<String, dynamic>? additionalInfo,
) async {
  final message = error is Exception ? error.toString() : error.toString();
  final stack = error is Error ? (error.stackTrace?.toString()) : null;
  if (!_isInitialized) {
    final payload = LogPayload(
      orgId: 'UNINITALIZED',
      eventData: ErrorEvent(
        message: message,
        stack: stack,
        componentName: componentName,
        additionalInfo: {...?additionalInfo, 'preInitError': true, 'timestamp': DateTime.now().millisecondsSinceEpoch},
        timestamp: DateTime.now().millisecondsSinceEpoch,
      ),
      metadata: getSystemInfo({'os': defaultTargetPlatform.name, 'browser': 'Flutter'}),
      eventType: EventType.error,
      userId: _userId,
    );
    try {
      await sendLog(payload);
    } catch (e) {
      _preInitQueue.add({'error': error, 'componentName': componentName, 'additionalInfo': additionalInfo});
      logWarn('Error tracked before initialization, queuing:', error);
    }
    return;
  }
  final eventData = ErrorEvent(
    message: message,
    stack: stack,
    componentName: componentName,
    additionalInfo: {...?additionalInfo, 'timestamp': DateTime.now().millisecondsSinceEpoch},
    timestamp: DateTime.now().millisecondsSinceEpoch,
  );
  final payload = LogPayload(
    orgId: _apiKey.isEmpty ? 'UNINITALIZED' : _apiKey,
    eventData: eventData,
    metadata: getSystemInfo({'os': defaultTargetPlatform.name, 'browser': 'Flutter'}),
    eventType: EventType.error,
    userId: _userId,
  );
  await sendLog(payload);
}