From 401bd6a7f8d650510cddc09e76e09dd73f099ab0 Mon Sep 17 00:00:00 2001 From: Bernd Steckmeister Date: Fri, 3 Jul 2026 09:45:05 +0200 Subject: [PATCH] style: weitere flutter-analyze Hinweise beheben MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - document_viewer: Matrix4.translate/scale durch translateByDouble/ scaleByDouble ersetzt (PDF-Zoom-Transformation, gleiches Verhalten) - rooms_panel: onReorder durch onReorderItem ersetzt (Index-Korrektur jetzt intern erledigt), implementation_imports-Hinweis kommentiert (SpaceChild wird vom matrix-Paket nicht öffentlich exportiert) - voip_manager: getSources()-Override kommentiert (erzwungen durch abstrakte MediaDevices-Klasse, die die Methode selbst deprecated hat) - settings_modal: BuildContext-Nutzung nach await mit context.mounted abgesichert (Geräte umbenennen, Passwort-Abfrage bei Massenlogout) Verbleibend: chat_provider.dart onUpdate (Timeline-Redecrypt-Pfad, bewusst nicht angefasst ohne dedizierten E2EE-Test, siehe PROGRESS.md). --- CHANGES.md | 7 +++++++ lib/core/voip_manager.dart | 3 +++ lib/features/chat/document_viewer.dart | 6 +++--- lib/features/rooms/rooms_panel.dart | 5 +++-- lib/widgets/settings_modal.dart | 3 ++- 5 files changed, 18 insertions(+), 6 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index a152ce9..ead8f7d 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -1115,3 +1115,10 @@ 2026-07-03 06:35 [Edit] /home/steggi/pyramid/lib/features/chat/chat_view.dart 2026-07-03 06:35 [Edit] /home/steggi/pyramid/lib/features/chat/chat_view.dart 2026-07-03 06:35 [Edit] /home/steggi/pyramid/lib/features/chat/chat_view.dart +2026-07-03 09:43 [Edit] /home/steggi/pyramid/lib/features/chat/document_viewer.dart +2026-07-03 09:43 [Edit] /home/steggi/pyramid/lib/features/rooms/rooms_panel.dart +2026-07-03 09:43 [Edit] /home/steggi/pyramid/lib/features/rooms/rooms_panel.dart +2026-07-03 09:43 [Edit] /home/steggi/pyramid/lib/core/voip_manager.dart +2026-07-03 09:44 [Edit] /home/steggi/pyramid/lib/core/voip_manager.dart +2026-07-03 09:44 [Edit] /home/steggi/pyramid/lib/widgets/settings_modal.dart +2026-07-03 09:44 [Edit] /home/steggi/pyramid/lib/widgets/settings_modal.dart diff --git a/lib/core/voip_manager.dart b/lib/core/voip_manager.dart index 01a8fde..b6047c3 100644 --- a/lib/core/voip_manager.dart +++ b/lib/core/voip_manager.dart @@ -528,7 +528,10 @@ class MediaDevicesWrapper extends MediaDevices { set ondevicechange(Function(dynamic event)? callback) => _delegate.ondevicechange = callback; @override Function(dynamic event)? get ondevicechange => _delegate.ondevicechange; + // Erzwungener Override der abstrakten MediaDevices-Klasse, die getSources() + // selbst als deprecated markiert (Ersatz: enumerateDevices()) aber weiterhin verlangt. @override + // ignore: deprecated_member_use Future> getSources() => _delegate.getSources(); @override Future selectAudioOutput([AudioOutputOptions? options]) => _delegate.selectAudioOutput(options); diff --git a/lib/features/chat/document_viewer.dart b/lib/features/chat/document_viewer.dart index dce8cfb..d647782 100644 --- a/lib/features/chat/document_viewer.dart +++ b/lib/features/chat/document_viewer.dart @@ -829,9 +829,9 @@ class _PdfFullscreenViewerState extends State<_PdfFullscreenViewer> { if ((applied - 1).abs() < 0.001) return; final cx = size.width / 2, cy = size.height / 2; final m = _tc.value.clone() - ..translate(cx, cy) - ..scale(applied) - ..translate(-cx, -cy); + ..translateByDouble(cx, cy, 0, 1) + ..scaleByDouble(applied, applied, applied, 1) + ..translateByDouble(-cx, -cy, 0, 1); setState(() => _tc.value = m); } diff --git a/lib/features/rooms/rooms_panel.dart b/lib/features/rooms/rooms_panel.dart index 3325e73..cb18e3c 100644 --- a/lib/features/rooms/rooms_panel.dart +++ b/lib/features/rooms/rooms_panel.dart @@ -3,6 +3,8 @@ import 'dart:async'; import 'package:flutter/material.dart' hide Visibility; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:matrix/matrix.dart'; +// SpaceChild wird vom matrix-Paket nicht öffentlich exportiert. +// ignore: implementation_imports import 'package:matrix/src/utils/space_child.dart'; import 'package:pyramid/core/app_state.dart'; import 'package:pyramid/core/matrix_client.dart'; @@ -1173,8 +1175,7 @@ class _SpaceRoomsListState extends ConsumerState<_SpaceRoomsList> { shrinkWrap: true, physics: const NeverScrollableScrollPhysics(), buildDefaultDragHandles: false, - onReorder: (oldIdx, newIdx) { - if (newIdx > oldIdx) newIdx--; + onReorderItem: (oldIdx, newIdx) { final ids = filteredDirect.map((r) => r.id).toList(); final moved = ids.removeAt(oldIdx); ids.insert(newIdx, moved); diff --git a/lib/widgets/settings_modal.dart b/lib/widgets/settings_modal.dart index f3a12bd..fff79bd 100644 --- a/lib/widgets/settings_modal.dart +++ b/lib/widgets/settings_modal.dart @@ -2499,6 +2499,7 @@ class _SessionsSectionState extends ConsumerState<_SessionsSection> { Future _renameCurrentDevice(BuildContext context) async { final client = await ref.read(matrixClientProvider.future); + if (!context.mounted) return; final currentName = _devices .where((d) => d.deviceId == _currentDeviceId) .map((d) => d.unsigned?['device_display_name'] as String? ?? d.deviceId ?? '') @@ -2589,7 +2590,7 @@ class _SessionsSectionState extends ConsumerState<_SessionsSection> { try { await client.deleteDevices(otherIds); } on MatrixException catch (e) { - if (e.requireAdditionalAuthentication && mounted) { + if (e.requireAdditionalAuthentication && context.mounted) { final password = await _askPassword(context, pt); if (password == null || !mounted) { setState(() => _logoutAllLoading = false); return; } try {