Files
pyramid/lib/main.dart
T
Bernd SteckmeisterandClaude Opus 5.5 a1d64ec813 feat: Handy - Platz fuer Statusleiste, randlose Bild-Vollansicht mit Gesten, groessere Medien im Chat
Bernds Beta-Feedback:
- main.dart: edgeToEdge statt immersiveSticky (Statusleiste schob sich ueber
  den Inhalt); MobileShell mit SafeArea + Statusleisten-Symbolen passend
  zum Theme, Hintergrund bg1 = Kopfzeilenfarbe.
- MediaViewer: Handy randlos auf Schwarz (vorher 24-px-Rand, halbtransparent);
  Tippen neben das Bild schliesst, aufs Bild blendet Leiste ein/aus; Wischen
  hoch/runter schliesst (nur ohne Zoom, ueber InteractiveViewer-Callbacks,
  kein Gestenkonflikt mit Zwei-Finger-Zoom); Doppeltipp zoomt an der Stelle.
- Chat: Bilder auf dem Handy bis halbe Bildschirmhoehe statt fest 320 px;
  Videos im echten Seitenverhaeltnis statt fest 16:9.
- UI-Durchlauf integration_test/mobile_ui_screens_test.dart (Handy-Format,
  Testprofil, Screenshots nach build/ui_screens/) + Testinhalte-Helfer
  test/live_ui_fixture_test.dart; scripts/test.ps1 -Ui.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-07 16:52:10 +02:00

72 lines
2.6 KiB
Dart
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import 'dart:io';
import 'package:firebase_core/firebase_core.dart';
import 'package:firebase_messaging/firebase_messaging.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:flutter_vodozemac/flutter_vodozemac.dart' as vod;
import 'package:media_kit/media_kit.dart';
import 'package:pyramid/core/app.dart';
import 'package:pyramid/core/background_push.dart';
import 'package:pyramid/core/matrix_client.dart';
import 'package:pyramid/features/auth/login_notifier.dart';
import 'package:pyramid/widgets/pyramid_loader.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
MediaKit.ensureInitialized();
if (Platform.isAndroid) {
// Firebase must be initialised first, then the background handler registered.
try { await Firebase.initializeApp(); } catch (_) {}
FirebaseMessaging.onBackgroundMessage(handleBackgroundMessage);
// Store the background-engine callback handle so PushService.kt /
// ReplyReceiver can decrypt + send encrypted replies when the app is killed.
await registerBgEngineHandle();
}
// Catch unhandled async exceptions to prevent silent crashes
FlutterError.onError = (details) {
FlutterError.presentError(details);
};
await vod.init();
// Status- und Navigationsleiste bleiben sichtbar (edge-to-edge): die App
// zeichnet darunter, hält per SafeArea (Handy-Layout in app_shell.dart)
// aber Abstand. Vorher immersiveSticky – da schob sich die Statusleiste
// beim Herunterwischen über Kopfzeile und Text (Bernds Feedback 2026-10-07).
await SystemChrome.setEnabledSystemUIMode(SystemUiMode.edgeToEdge);
SystemChrome.setSystemUIOverlayStyle(const SystemUiOverlayStyle(
statusBarColor: Colors.transparent,
systemNavigationBarColor: Colors.transparent,
systemNavigationBarContrastEnforced: false,
));
runApp(const ProviderScope(child: PyramidBootstrap()));
}
class PyramidBootstrap extends ConsumerWidget {
const PyramidBootstrap({super.key});
@override
Widget build(BuildContext context, WidgetRef ref) {
final clientAsync = ref.watch(matrixClientProvider);
return clientAsync.when(
loading: () => const MaterialApp(
home: Scaffold(body: Center(child: PyramidLoader(size: 80))),
),
error: (e, _) => MaterialApp(
home: Scaffold(body: Center(child: Text('Fehler: $e'))),
),
data: (_) {
// Homeserver einmalig aus SharedPreferences laden
initHomeserver(ref);
return const PyramidApp();
},
);
}
}