reworked developer tools with diagnostics, storage viewers and release-capable debug overlays

This commit is contained in:
2026-09-26 14:34:47 +02:00
parent 0f6c388940
commit e6f74ca6fe
18 changed files with 1330 additions and 239 deletions
+23 -5
View File
@@ -8,8 +8,22 @@ enum MarianumConnectEndpoint { live, beta, custom }
@JsonSerializable()
class DevToolsSettings {
bool showPerformanceOverlay;
bool checkerboardOffscreenLayers;
bool checkerboardRasterCacheImages;
@JsonKey(defaultValue: false)
bool showFrameStats;
@JsonKey(defaultValue: false)
bool showMemoryStats;
@JsonKey(defaultValue: false)
bool showSemanticsDebugger;
@JsonKey(defaultValue: false)
bool slowAnimations;
/// Forced text scale factor; `0` follows the system setting.
@JsonKey(defaultValue: 0)
double textScaleOverride;
@JsonKey(defaultValue: MarianumConnectEndpoint.live)
MarianumConnectEndpoint marianumConnectEndpoint;
@@ -24,8 +38,11 @@ class DevToolsSettings {
DevToolsSettings({
required this.showPerformanceOverlay,
required this.checkerboardOffscreenLayers,
required this.checkerboardRasterCacheImages,
this.showFrameStats = false,
this.showMemoryStats = false,
this.showSemanticsDebugger = false,
this.slowAnimations = false,
this.textScaleOverride = 0,
this.marianumConnectEndpoint = MarianumConnectEndpoint.live,
this.marianumConnectCustomUrl = '',
this.emergencyNoticeUrl = '',
@@ -51,7 +68,8 @@ class DevToolsSettings {
/// Compiled-in source for the backend-independent emergency notice. Must live
/// on infrastructure that is reachable even when MarianumConnect is down.
static const String emergencyNoticeDefaultUrl = 'https://www.marianum-fulda.de/~aushang/marMobile.override';
static const String emergencyNoticeDefaultUrl =
'https://www.marianum-fulda.de/~aushang/marMobile.override';
String? resolveEmergencyNoticeUrl() =>
sanitizeCustomUrl(emergencyNoticeUrl) ??
+23 -17
View File
@@ -6,27 +6,33 @@ part of 'dev_tools_settings.dart';
// JsonSerializableGenerator
// **************************************************************************
DevToolsSettings _$DevToolsSettingsFromJson(
Map<String, dynamic> json,
) => DevToolsSettings(
showPerformanceOverlay: json['showPerformanceOverlay'] as bool,
checkerboardOffscreenLayers: json['checkerboardOffscreenLayers'] as bool,
checkerboardRasterCacheImages: json['checkerboardRasterCacheImages'] as bool,
marianumConnectEndpoint:
$enumDecodeNullable(
_$MarianumConnectEndpointEnumMap,
json['marianumConnectEndpoint'],
) ??
MarianumConnectEndpoint.live,
marianumConnectCustomUrl: json['marianumConnectCustomUrl'] as String? ?? '',
emergencyNoticeUrl: json['emergencyNoticeUrl'] as String? ?? '',
);
DevToolsSettings _$DevToolsSettingsFromJson(Map<String, dynamic> json) =>
DevToolsSettings(
showPerformanceOverlay: json['showPerformanceOverlay'] as bool,
showFrameStats: json['showFrameStats'] as bool? ?? false,
showMemoryStats: json['showMemoryStats'] as bool? ?? false,
showSemanticsDebugger: json['showSemanticsDebugger'] as bool? ?? false,
slowAnimations: json['slowAnimations'] as bool? ?? false,
textScaleOverride: (json['textScaleOverride'] as num?)?.toDouble() ?? 0,
marianumConnectEndpoint:
$enumDecodeNullable(
_$MarianumConnectEndpointEnumMap,
json['marianumConnectEndpoint'],
) ??
MarianumConnectEndpoint.live,
marianumConnectCustomUrl:
json['marianumConnectCustomUrl'] as String? ?? '',
emergencyNoticeUrl: json['emergencyNoticeUrl'] as String? ?? '',
);
Map<String, dynamic> _$DevToolsSettingsToJson(DevToolsSettings instance) =>
<String, dynamic>{
'showPerformanceOverlay': instance.showPerformanceOverlay,
'checkerboardOffscreenLayers': instance.checkerboardOffscreenLayers,
'checkerboardRasterCacheImages': instance.checkerboardRasterCacheImages,
'showFrameStats': instance.showFrameStats,
'showMemoryStats': instance.showMemoryStats,
'showSemanticsDebugger': instance.showSemanticsDebugger,
'slowAnimations': instance.slowAnimations,
'textScaleOverride': instance.textScaleOverride,
'marianumConnectEndpoint':
_$MarianumConnectEndpointEnumMap[instance.marianumConnectEndpoint]!,
'marianumConnectCustomUrl': instance.marianumConnectCustomUrl,
@@ -37,6 +37,8 @@ Future<void> _deleteHydratedBox(String directoryPath) async {
class InMemoryStorage implements Storage {
final Map<String, dynamic> _values = {};
Iterable<String> get keys => _values.keys;
@override
dynamic read(String key) => _values[key];