Refactor log viewer so doesn't need to be refreshed every time a line is added. Use logHistoryProvider for running list of elements

merge-requests/67/merge
Hank Grabowski 2024-12-01 19:51:36 -05:00
rodzic 01ca113db6
commit 6f59f54a43
4 zmienionych plików z 32 dodań i 6 usunięć

Wyświetl plik

@ -13,6 +13,7 @@ import 'app_theme.dart';
import 'di_initialization.dart';
import 'globals.dart';
import 'riverpod_controllers/globals_services.dart';
import 'riverpod_controllers/log_service.dart';
import 'riverpod_controllers/settings_services.dart';
import 'routes.dart';
import 'services/auth_service.dart';
@ -80,6 +81,8 @@ class _AppState extends fr.ConsumerState<App> {
rootRiverpodProviderContainer ??= root;
}
ref.watch(logServiceProvider);
final appRouter = GoRouter(
initialLocation: ScreenPaths.timelines,
debugLogDiagnostics: true,

Wyświetl plik

@ -1,23 +1,30 @@
import 'dart:collection';
import 'package:flutter/foundation.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:logging/logging.dart';
import 'package:riverpod_annotation/riverpod_annotation.dart';
part 'log_service.g.dart';
const _defaultMaxItems = 1000;
const _maxItems = _defaultMaxItems;
final _events = Queue<LogRecord>();
@Riverpod(keepAlive: true)
List<LogRecord> logHistory(Ref ref) {
return UnmodifiableListView(_events);
}
@Riverpod(keepAlive: true)
class LogService extends _$LogService {
final _maxItems = _defaultMaxItems;
final _events = Queue<LogRecord>();
@override
UnmodifiableListView<LogRecord> build() {
Logger.root.clearListeners();
Logger.root.onRecord.listen((event) {
add(event);
});
ref.onDispose(Logger.root.clearListeners);
return UnmodifiableListView(_events);
}
@ -30,6 +37,6 @@ class LogService extends _$LogService {
if (_events.length > _maxItems) {
_events.removeFirst();
}
ref.invalidateSelf();
ref.invalidate(logHistoryProvider);
}
}

Wyświetl plik

@ -6,7 +6,23 @@ part of 'log_service.dart';
// RiverpodGenerator
// **************************************************************************
String _$logServiceHash() => r'5bbf2513784053f797ba73b282d52d9c6e465782';
String _$logHistoryHash() => r'7f1865f051b54ad783f50c9bf8ae781f5125c56d';
/// See also [logHistory].
@ProviderFor(logHistory)
final logHistoryProvider = Provider<List<LogRecord>>.internal(
logHistory,
name: r'logHistoryProvider',
debugGetCreateSourceHash:
const bool.fromEnvironment('dart.vm.product') ? null : _$logHistoryHash,
dependencies: null,
allTransitiveDependencies: null,
);
@Deprecated('Will be removed in 3.0. Use Ref instead')
// ignore: unused_element
typedef LogHistoryRef = ProviderRef<List<LogRecord>>;
String _$logServiceHash() => r'3eed95f8843f5d5a7d23a0a81cfa265323a9b819';
/// See also [LogService].
@ProviderFor(LogService)

Wyświetl plik

@ -81,7 +81,7 @@ class _LogViewerScreenState extends ConsumerState<LogViewerScreen> {
@override
Widget build(BuildContext context) {
final logLevel = ref.watch(logLevelSettingProvider);
final events = ref.watch(logServiceProvider);
final events = ref.watch(logHistoryProvider);
return Scaffold(
appBar: StandardAppBar.build(context, 'Log Viewer'),