relatica/lib/riverpod_controllers/log_service.dart
Hank Grabowski a1cb3d2d37 Refactor Riverpod log and hashtag service to not require a global container handle
Tags still need it until Client is elevated
2024-09-04 15:01:40 -04:00

57 lines
1.5 KiB
Dart

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();
}
}
//const _defaultMaxItems = 1000;
//
// class LogService extends ChangeNotifier {
// var maxItems = _defaultMaxItems;
//
// final _events = Queue<LogRecord>();
//
// List<LogRecord> get events => UnmodifiableListView(_events);
//
// void add(LogRecord event) {
// // final logName = event.loggerName.isEmpty ? 'ROOT' : event.loggerName;
// // final msg =
// // '${event.level.name} - $logName @ ${event.time}: ${event.message}';
// // print(msg);
// _events.add(event);
// if (_events.length > maxItems) {
// _events.removeFirst();
// }
// notifyListeners();
// }
// }