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 {