generateTextMessage method

  1. @override
String generateTextMessage({
  1. TimeFormat timeFormat = TimeFormat.timeAndSeconds,
})

Internal method that generates a complete message about the event

See examples: TalkerLog -> TalkerLog.generateTextMessage TalkerException -> TalkerException.generateTextMessage TalkerError -> TalkerError.generateTextMessage

Implementation

@override
String generateTextMessage({
  TimeFormat timeFormat = TimeFormat.timeAndSeconds,
}) {
  final StringBuffer msg = StringBuffer();

  msg.write('[$title]');

  if (response?.request?.method != null || request?.method != null) {
    msg.write(' [${response?.request?.method ?? request?.method}]');
  }

  if (response?.request != null || request != null) {
    msg.writeln(' ${response?.request?.url ?? request?.url}');
  } else if (exception is ClientException) {
    msg.writeln(' ${(exception as ClientException).uri}');
  } else {
    msg.writeln();
  }

  if (response?.statusCode != null) {
    msg.writeln('Status: ${response?.statusCode}');
  }

  final String? responseMessage = switch (exception) {
    ClientException ex => ex.message,
    Exception ex => ex.toString(),
    _ => null,
  };

  if (settings.printResponseTime) {
    final int? responseTime = getResponseTime(response?.headers) ??
        getResponseTime(response?.request?.headers);

    if (responseTime != null) {
      msg.writeln('Time: $responseTime ms');
    }
  }

  if (settings.printErrorMessage && (responseMessage?.isNotEmpty ?? false)) {
    msg.writeln('Message: $responseMessage');
  }

  if (settings.printErrorHeaders && (response?.headers.isNotEmpty ?? false)) {
    msg.writeln('Headers: ${convert(response?.headers)}');
  }

  final String? data = switch (response) {
    Response res => res.body,
    _ => null,
  };

  if (settings.printErrorData && (data?.isNotEmpty ?? false)) {
    late final dynamic jsonData;
    try {
      jsonData = jsonDecode(data!);
    } catch (_) {
      jsonData = null;
    }

    try {
      if (jsonData != null) {
        msg.writeln('Data: ${convert(jsonData)}');
      } else {
        msg.writeln('Data: ${convert(data)}');
      }
    } catch (error, stackTrace) {
      msg.writeln(
        'Data: <failed to convert data: $error\nstackTrace: $stackTrace>',
      );
    }
  }

  return msg.toString().trimRight();
}