toString method

  1. @override
String toString()
override

A string representation of this object.

Some classes have a default textual representation, often paired with a static parse function (like int.parse). These classes will provide the textual representation as their string representation.

Other classes have no meaningful textual representation that a program will care about. Such classes will typically override toString to provide useful information when inspecting the object, mainly for debugging or logging.

Implementation

@override
String toString() {
  var messageString = message ?? '';
  try {
    if (detailsType == LogEventDetailsType.pubNubInstanceInfo) {
      var pubnub = details as PubNub;
      var keysets = pubnub.keysets;

      messageString += '\n\tPubNub Instance Information:';
      messageString += '\n\tInstance ID: ${Core.instanceId}';
      messageString += '\n\tVersion: ${Core.version}';

      // Log module information
      messageString += '\n\tModules:';
      messageString += '\n\t  Networking: ${pubnub.networking}';
      messageString += '\n\t  Parser: ${pubnub.parser}';
      messageString += '\n\t  Crypto: ${pubnub.crypto}';

      // Log keyset information
      messageString += '\n\tKeysets:';
      var allKeysets = keysets.keysets;
      if (allKeysets.isEmpty) {
        messageString += '\n\t  No keysets configured';
      } else {
        // Get all keyset names by trying to access them
        var keysetNames = <String>[];
        try {
          // Try to get the default keyset name by checking which one is the default
          var defaultKeyset = keysets.defaultKeyset;
          for (var keyset in allKeysets) {
            // Find the name by comparing with default
            if (keyset == defaultKeyset) {
              keysetNames.add('default');
            } else {
              // For non-default keysets, we'll use a generic name
              keysetNames.add('keyset_${keysetNames.length + 1}');
            }
          }
        } catch (e) {
          // If no default keyset, just number them
          for (var i = 0; i < allKeysets.length; i++) {
            keysetNames.add('keyset_${i + 1}');
          }
        }

        for (var i = 0; i < allKeysets.length; i++) {
          var keyset = allKeysets[i];
          var name = keysetNames[i];
          messageString += '\n\t  $name:';
          messageString += keyset.toString();
          if (i == 0 && keysetNames[i] == 'default') {
            messageString += '\n\t    (Default)';
          }
        }
      }
    } else if (detailsType == LogEventDetailsType.apiParametersInfo) {
      final detailsMap = _parametersToJson(details);
      messageString +=
          '\n\t${detailsMap.entries.map((entry) => '${entry.key}: ${entry.value}').join('\n\t')}';
    } else if (detailsType == LogEventDetailsType.networkRequestInfo) {
      messageString += (details as Request).toString();
    } else if (detailsType == LogEventDetailsType.networkResponseInfo) {
      if (details is Response) {
        messageString += details.toString();
      } else if (details is Map) {
        var detailsMap = details as Map<String, dynamic>;
        var request = detailsMap['request'] as Request;
        var response = detailsMap['response'] as Response;
        messageString += '\n\tURL: ${request.uri}';
        messageString += response.toString();
      }
    }
  } catch (e) {
    messageString += '\n logging error: $e';
  }
  return messageString;
}