relatica/lib/riverpod_controllers/log_service.dart

36 wiersze
893 B
Dart
Czysty Zwykły widok Historia

import 'dart:collection';
import 'package:flutter/foundation.dart';
import 'package:logging/logging.dart';
import 'package:riverpod_annotation/riverpod_annotation.dart';
part 'log_service.g.dart';
const _defaultMaxItems = 1000;
@Riverpod(keepAlive: true)
class LogService extends _$LogService {
final _maxItems = _defaultMaxItems;
final _events = Queue<LogRecord>();
@override
UnmodifiableListView<LogRecord> build() {
Logger.root.onRecord.listen((event) {
add(event);
});
return UnmodifiableListView(_events);
}
void add(LogRecord event) {
final logName = event.loggerName.isEmpty ? 'ROOT' : event.loggerName;
final msg =
'${event.level.name} - $logName @ ${event.time}: ${event.message}';
debugPrint(msg);
_events.add(event);
if (_events.length > _maxItems) {
_events.removeFirst();
}
ref.invalidateSelf();
}
}