getFormatedStringLinesFromStackTrace method

List<String> getFormatedStringLinesFromStackTrace({
  1. required StackTrace stackTrace,
})

Implementation

List<String> getFormatedStringLinesFromStackTrace(
    {required StackTrace stackTrace}) {
  final lines = stackTrace.toString().split('\n');

  final List<String> castedStack = [];
  int cout = 0;

  for (String line in lines) {
    if (_discardDeviceStacktraceLine(line) ||
        _discardWebStacktraceLine(line) ||
        _discardBrowserStacktraceLine(line) ||
        line.isEmpty) {
      continue;
    }
    final cleanText = line
        .replaceFirst(RegExp(r'#\d+\s+'), '')
        .replaceAll(_devicePackageText, '');
    final errorPlace = line.split(' ').last;

    final bool hasTrace = _devicePackageText.hasMatch(errorPlace);

    final castedText = '#$cout $cleanText';
    castedStack.add(castedText);

    if (hasTrace) {
      castedStack.add(errorPlace);
    }

    cout++;
  }

  final List<String> acumulatorStackLines = [];

  final List<String> choosedLines = castedStack.isEmpty ? lines : castedStack;

  for (var line in choosedLines) {
    if (line.contains('(file:')) {
      final index = line.indexOf('(file:');
      acumulatorStackLines.add(line.substring(0, index));
      acumulatorStackLines.add(line.substring(index));
    } else {
      acumulatorStackLines.add(line);
    }
  }
  return acumulatorStackLines;
}