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