logException method
Future<void>
logException(
- dynamic exception,
- bool handled, [
- dynamic stackTrace
])
Implementation
Future<void> logException(dynamic exception, bool handled,
[dynamic stackTrace]) async {
final Chain chain = _getStackTraceChain(stackTrace);
final List<Map<String, dynamic>> frames = <Map<String, dynamic>>[];
var ds = AccumulatorSink<Digest>();
var s = sha1.startChunkedConversion(ds);
s.add(utf8.encode(getApplicationVersionInternal()));
for (var trace in chain.traces) {
for (var frame in trace.frames) {
frames.add(_constructFrame(frame));
s.add(utf8.encode(frame.location));
}
}
s.close();
// Assuming you want to send the location of the first frame
final Frame? firstFrame =
chain.traces.expand((trace) => trace.frames).firstOrNull;
final String location = firstFrame != null
? '${firstFrame.member} (${firstFrame.uri.toString().split('/').last}:${firstFrame.line})'
: 'unknown';
await _channel.invokeMethod('logException', <String, dynamic>{
'name': exception.runtimeType.toString(),
'reason': exception.toString(),
'stackTrace': frames.map((frame) => json.encode(frame)).toList(),
'handled': handled,
'signature': ds.events.single.toString(),
'location': location,
});
}