kopia lustrzana https://gitlab.com/mysocialportal/relatica
				
				
				
			Refactor log viewer so doesn't need to be refreshed every time a line is added. Use logHistoryProvider for running list of elements
							rodzic
							
								
									01ca113db6
								
							
						
					
					
						commit
						6f59f54a43
					
				|  | @ -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, | ||||
|  |  | |||
|  | @ -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); | ||||
|   } | ||||
| } | ||||
|  |  | |||
|  | @ -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) | ||||
|  |  | |||
|  | @ -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'), | ||||
|  |  | |||
		Ładowanie…
	
		Reference in New Issue
	
	 Hank Grabowski
						Hank Grabowski