wip: Sicherungs-Commit aller Änderungen seit April + Arbeitsstruktur (CLAUDE.md, ROADMAP.md, PROGRESS.md, Autopilot)

6 Wochen uncommittete Arbeit (Voice-Channels, LiveKit-Manager, Settings-Modal u.v.m.)
als ein WIP-Commit gesichert, damit nichts verloren geht und der Pi den aktuellen
Stand klonen kann. Thematische Aufarbeitung: siehe ROADMAP M0.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CPrAGBxBT6GfPXzeWQ4AXb
This commit is contained in:
Bernd Steckmeister
2026-07-03 05:47:18 +02:00
parent d706ace35f
commit 25ed765a03
195 changed files with 47784 additions and 1236 deletions
+31 -1
View File
@@ -1,11 +1,41 @@
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();
// Hide status bar and navigation bar for immersive feel
await SystemChrome.setEnabledSystemUIMode(SystemUiMode.immersiveSticky);
runApp(const ProviderScope(child: PyramidBootstrap()));
}
@@ -18,7 +48,7 @@ class PyramidBootstrap extends ConsumerWidget {
return clientAsync.when(
loading: () => const MaterialApp(
home: Scaffold(body: Center(child: CircularProgressIndicator())),
home: Scaffold(body: Center(child: PyramidLoader(size: 80))),
),
error: (e, _) => MaterialApp(
home: Scaffold(body: Center(child: Text('Fehler: $e'))),