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