56 lines
1.4 KiB
Dart
56 lines
1.4 KiB
Dart
import 'package:flutter/material.dart';
|
|
|
|
import '../services/app_preferences.dart';
|
|
import '../theme/app_theme.dart';
|
|
import 'onboarding/onboarding_screen.dart';
|
|
import 'shell/main_shell_screen.dart';
|
|
|
|
/// Zeigt einmalig das Onboarding, danach die Haupt-App.
|
|
class AppLoggedInGate extends StatefulWidget {
|
|
const AppLoggedInGate({super.key, required this.onLoggedOut});
|
|
|
|
final VoidCallback onLoggedOut;
|
|
|
|
@override
|
|
State<AppLoggedInGate> createState() => _AppLoggedInGateState();
|
|
}
|
|
|
|
class _AppLoggedInGateState extends State<AppLoggedInGate> {
|
|
bool _prefsReady = false;
|
|
bool _onboardingDone = false;
|
|
|
|
@override
|
|
void initState() {
|
|
super.initState();
|
|
_loadPrefs();
|
|
}
|
|
|
|
Future<void> _loadPrefs() async {
|
|
final done = await AppPreferences.isOnboardingDone();
|
|
if (!mounted) return;
|
|
setState(() {
|
|
_onboardingDone = done;
|
|
_prefsReady = true;
|
|
});
|
|
}
|
|
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
if (!_prefsReady) {
|
|
return const Scaffold(
|
|
backgroundColor: AppTheme.background,
|
|
body: Center(child: CircularProgressIndicator()),
|
|
);
|
|
}
|
|
if (!_onboardingDone) {
|
|
return OnboardingScreen(
|
|
onComplete: () async {
|
|
await AppPreferences.setOnboardingDone();
|
|
if (mounted) setState(() => _onboardingDone = true);
|
|
},
|
|
);
|
|
}
|
|
return MainShellScreen(onLoggedOut: widget.onLoggedOut);
|
|
}
|
|
}
|