style: weitere flutter-analyze Hinweise beheben

- 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).
This commit is contained in:
Bernd Steckmeister
2026-07-03 09:45:05 +02:00
parent 057ac1e4ea
commit 401bd6a7f8
5 changed files with 18 additions and 6 deletions
+7
View File
@@ -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 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
+3
View File
@@ -528,7 +528,10 @@ class MediaDevicesWrapper extends MediaDevices {
set ondevicechange(Function(dynamic event)? callback) => _delegate.ondevicechange = callback; set ondevicechange(Function(dynamic event)? callback) => _delegate.ondevicechange = callback;
@override @override
Function(dynamic event)? get ondevicechange => _delegate.ondevicechange; 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 @override
// ignore: deprecated_member_use
Future<List<dynamic>> getSources() => _delegate.getSources(); Future<List<dynamic>> getSources() => _delegate.getSources();
@override @override
Future<MediaDeviceInfo> selectAudioOutput([AudioOutputOptions? options]) => _delegate.selectAudioOutput(options); Future<MediaDeviceInfo> selectAudioOutput([AudioOutputOptions? options]) => _delegate.selectAudioOutput(options);
+3 -3
View File
@@ -829,9 +829,9 @@ class _PdfFullscreenViewerState extends State<_PdfFullscreenViewer> {
if ((applied - 1).abs() < 0.001) return; if ((applied - 1).abs() < 0.001) return;
final cx = size.width / 2, cy = size.height / 2; final cx = size.width / 2, cy = size.height / 2;
final m = _tc.value.clone() final m = _tc.value.clone()
..translate(cx, cy) ..translateByDouble(cx, cy, 0, 1)
..scale(applied) ..scaleByDouble(applied, applied, applied, 1)
..translate(-cx, -cy); ..translateByDouble(-cx, -cy, 0, 1);
setState(() => _tc.value = m); setState(() => _tc.value = m);
} }
+3 -2
View File
@@ -3,6 +3,8 @@ import 'dart:async';
import 'package:flutter/material.dart' hide Visibility; import 'package:flutter/material.dart' hide Visibility;
import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:matrix/matrix.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:matrix/src/utils/space_child.dart';
import 'package:pyramid/core/app_state.dart'; import 'package:pyramid/core/app_state.dart';
import 'package:pyramid/core/matrix_client.dart'; import 'package:pyramid/core/matrix_client.dart';
@@ -1173,8 +1175,7 @@ class _SpaceRoomsListState extends ConsumerState<_SpaceRoomsList> {
shrinkWrap: true, shrinkWrap: true,
physics: const NeverScrollableScrollPhysics(), physics: const NeverScrollableScrollPhysics(),
buildDefaultDragHandles: false, buildDefaultDragHandles: false,
onReorder: (oldIdx, newIdx) { onReorderItem: (oldIdx, newIdx) {
if (newIdx > oldIdx) newIdx--;
final ids = filteredDirect.map((r) => r.id).toList(); final ids = filteredDirect.map((r) => r.id).toList();
final moved = ids.removeAt(oldIdx); final moved = ids.removeAt(oldIdx);
ids.insert(newIdx, moved); ids.insert(newIdx, moved);
+2 -1
View File
@@ -2499,6 +2499,7 @@ class _SessionsSectionState extends ConsumerState<_SessionsSection> {
Future<void> _renameCurrentDevice(BuildContext context) async { Future<void> _renameCurrentDevice(BuildContext context) async {
final client = await ref.read(matrixClientProvider.future); final client = await ref.read(matrixClientProvider.future);
if (!context.mounted) return;
final currentName = _devices final currentName = _devices
.where((d) => d.deviceId == _currentDeviceId) .where((d) => d.deviceId == _currentDeviceId)
.map((d) => d.unsigned?['device_display_name'] as String? ?? d.deviceId ?? '') .map((d) => d.unsigned?['device_display_name'] as String? ?? d.deviceId ?? '')
@@ -2589,7 +2590,7 @@ class _SessionsSectionState extends ConsumerState<_SessionsSection> {
try { try {
await client.deleteDevices(otherIds); await client.deleteDevices(otherIds);
} on MatrixException catch (e) { } on MatrixException catch (e) {
if (e.requireAdditionalAuthentication && mounted) { if (e.requireAdditionalAuthentication && context.mounted) {
final password = await _askPassword(context, pt); final password = await _askPassword(context, pt);
if (password == null || !mounted) { setState(() => _logoutAllLoading = false); return; } if (password == null || !mounted) { setState(() => _logoutAllLoading = false); return; }
try { try {