logBuffered method
void
logBuffered(
- Object identifier,
- MessagesBlockLogger messagesBlockLogger,
- Level level,
- String message,
Implementation
void logBuffered(Object identifier, MessagesBlockLogger messagesBlockLogger,
logging.Level level, String message) {
final buffer = _buffers[identifier] ??= [];
buffer.add((level, message));
Future<void>? call;
call = _bufferedCalls[identifier] ??=
Future.delayed(Duration(milliseconds: 100), () async {
var blocks = buffer.splitBeforeIndexed((i, e) {
if (i == 0) return false;
var prev = buffer[i - 1];
return prev.$1 != e.$1;
});
for (var block in blocks) {
if (block.isNotEmpty) {
var level = block.first.$1;
var messages = block.map((b) => b.$2).toList();
messagesBlockLogger(level, messages);
}
}
var prevCall = _bufferedCalls[identifier];
if (identical(prevCall, call)) {
_bufferedCalls[identifier] = null;
}
});
}