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 'di_initialization.dart'; | ||||||
| import 'globals.dart'; | import 'globals.dart'; | ||||||
| import 'riverpod_controllers/globals_services.dart'; | import 'riverpod_controllers/globals_services.dart'; | ||||||
|  | import 'riverpod_controllers/log_service.dart'; | ||||||
| import 'riverpod_controllers/settings_services.dart'; | import 'riverpod_controllers/settings_services.dart'; | ||||||
| import 'routes.dart'; | import 'routes.dart'; | ||||||
| import 'services/auth_service.dart'; | import 'services/auth_service.dart'; | ||||||
|  | @ -80,6 +81,8 @@ class _AppState extends fr.ConsumerState<App> { | ||||||
|       rootRiverpodProviderContainer ??= root; |       rootRiverpodProviderContainer ??= root; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  |     ref.watch(logServiceProvider); | ||||||
|  | 
 | ||||||
|     final appRouter = GoRouter( |     final appRouter = GoRouter( | ||||||
|       initialLocation: ScreenPaths.timelines, |       initialLocation: ScreenPaths.timelines, | ||||||
|       debugLogDiagnostics: true, |       debugLogDiagnostics: true, | ||||||
|  |  | ||||||
|  | @ -1,23 +1,30 @@ | ||||||
| import 'dart:collection'; | import 'dart:collection'; | ||||||
| 
 | 
 | ||||||
| import 'package:flutter/foundation.dart'; | import 'package:flutter/foundation.dart'; | ||||||
|  | import 'package:flutter_riverpod/flutter_riverpod.dart'; | ||||||
| import 'package:logging/logging.dart'; | import 'package:logging/logging.dart'; | ||||||
| import 'package:riverpod_annotation/riverpod_annotation.dart'; | import 'package:riverpod_annotation/riverpod_annotation.dart'; | ||||||
| 
 | 
 | ||||||
| part 'log_service.g.dart'; | part 'log_service.g.dart'; | ||||||
| 
 | 
 | ||||||
| const _defaultMaxItems = 1000; | const _defaultMaxItems = 1000; | ||||||
|  | const _maxItems = _defaultMaxItems; | ||||||
|  | final _events = Queue<LogRecord>(); | ||||||
|  | 
 | ||||||
|  | @Riverpod(keepAlive: true) | ||||||
|  | List<LogRecord> logHistory(Ref ref) { | ||||||
|  |   return UnmodifiableListView(_events); | ||||||
|  | } | ||||||
| 
 | 
 | ||||||
| @Riverpod(keepAlive: true) | @Riverpod(keepAlive: true) | ||||||
| class LogService extends _$LogService { | class LogService extends _$LogService { | ||||||
|   final _maxItems = _defaultMaxItems; |  | ||||||
|   final _events = Queue<LogRecord>(); |  | ||||||
| 
 |  | ||||||
|   @override |   @override | ||||||
|   UnmodifiableListView<LogRecord> build() { |   UnmodifiableListView<LogRecord> build() { | ||||||
|  |     Logger.root.clearListeners(); | ||||||
|     Logger.root.onRecord.listen((event) { |     Logger.root.onRecord.listen((event) { | ||||||
|       add(event); |       add(event); | ||||||
|     }); |     }); | ||||||
|  |     ref.onDispose(Logger.root.clearListeners); | ||||||
|     return UnmodifiableListView(_events); |     return UnmodifiableListView(_events); | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|  | @ -30,6 +37,6 @@ class LogService extends _$LogService { | ||||||
|     if (_events.length > _maxItems) { |     if (_events.length > _maxItems) { | ||||||
|       _events.removeFirst(); |       _events.removeFirst(); | ||||||
|     } |     } | ||||||
|     ref.invalidateSelf(); |     ref.invalidate(logHistoryProvider); | ||||||
|   } |   } | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -6,7 +6,23 @@ part of 'log_service.dart'; | ||||||
| // RiverpodGenerator | // 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]. | /// See also [LogService]. | ||||||
| @ProviderFor(LogService) | @ProviderFor(LogService) | ||||||
|  |  | ||||||
|  | @ -81,7 +81,7 @@ class _LogViewerScreenState extends ConsumerState<LogViewerScreen> { | ||||||
|   @override |   @override | ||||||
|   Widget build(BuildContext context) { |   Widget build(BuildContext context) { | ||||||
|     final logLevel = ref.watch(logLevelSettingProvider); |     final logLevel = ref.watch(logLevelSettingProvider); | ||||||
|     final events = ref.watch(logServiceProvider); |     final events = ref.watch(logHistoryProvider); | ||||||
| 
 | 
 | ||||||
|     return Scaffold( |     return Scaffold( | ||||||
|       appBar: StandardAppBar.build(context, 'Log Viewer'), |       appBar: StandardAppBar.build(context, 'Log Viewer'), | ||||||
|  |  | ||||||
		Ładowanie…
	
		Reference in New Issue
	
	 Hank Grabowski
						Hank Grabowski