toString method
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;
}