From 6f59f54a433251304b0c68737163ac07448eb39b Mon Sep 17 00:00:00 2001 From: Hank Grabowski Date: Sun, 1 Dec 2024 19:51:36 -0500 Subject: [PATCH] Refactor log viewer so doesn't need to be refreshed every time a line is added. Use logHistoryProvider for running list of elements --- lib/main.dart | 3 +++ lib/riverpod_controllers/log_service.dart | 15 +++++++++++---- lib/riverpod_controllers/log_service.g.dart | 18 +++++++++++++++++- lib/screens/logviewer_screen.dart | 2 +- 4 files changed, 32 insertions(+), 6 deletions(-) diff --git a/lib/main.dart b/lib/main.dart index fb9ab7b..84ec62a 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -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 { rootRiverpodProviderContainer ??= root; } + ref.watch(logServiceProvider); + final appRouter = GoRouter( initialLocation: ScreenPaths.timelines, debugLogDiagnostics: true, diff --git a/lib/riverpod_controllers/log_service.dart b/lib/riverpod_controllers/log_service.dart index 38f46af..21de239 100644 --- a/lib/riverpod_controllers/log_service.dart +++ b/lib/riverpod_controllers/log_service.dart @@ -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(); + +@Riverpod(keepAlive: true) +List logHistory(Ref ref) { + return UnmodifiableListView(_events); +} @Riverpod(keepAlive: true) class LogService extends _$LogService { - final _maxItems = _defaultMaxItems; - final _events = Queue(); - @override UnmodifiableListView 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); } } diff --git a/lib/riverpod_controllers/log_service.g.dart b/lib/riverpod_controllers/log_service.g.dart index 002a53d..de6e7dd 100644 --- a/lib/riverpod_controllers/log_service.g.dart +++ b/lib/riverpod_controllers/log_service.g.dart @@ -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>.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>; +String _$logServiceHash() => r'3eed95f8843f5d5a7d23a0a81cfa265323a9b819'; /// See also [LogService]. @ProviderFor(LogService) diff --git a/lib/screens/logviewer_screen.dart b/lib/screens/logviewer_screen.dart index 3713dcf..9512aa9 100644 --- a/lib/screens/logviewer_screen.dart +++ b/lib/screens/logviewer_screen.dart @@ -81,7 +81,7 @@ class _LogViewerScreenState extends ConsumerState { @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'),