import 'package:flutter/material.dart'; import 'core/app_state.dart'; import 'core/app_theme.dart'; import 'core/sync/sync_coordinator.dart'; import 'features/onboarding/onboarding_pages.dart'; import 'features/shell/learning_shell.dart'; void main() { runApp(const KouyuEnglishApp()); } class KouyuEnglishApp extends StatefulWidget { const KouyuEnglishApp({super.key}); @override State createState() => _KouyuEnglishAppState(); } class _KouyuEnglishAppState extends State { final appState = AppState(); var onboardingStep = 0; @override void initState() { super.initState(); SyncCoordinator.instance.init().then((_) { if (mounted && appState.isLoaded) { SyncCoordinator.instance.triggerBackgroundSync(appState); } }); appState.load().then((_) { if (mounted && SyncCoordinator.instance.isInitialized) { SyncCoordinator.instance.triggerBackgroundSync(appState); } }); } @override void dispose() { appState.dispose(); super.dispose(); } @override Widget build(BuildContext context) { return MaterialApp( title: '芽说英语 · SpeakSprout', debugShowCheckedModeBanner: false, theme: buildAppTheme(), home: AnimatedBuilder( animation: appState, builder: (context, _) { if (!appState.isLoaded) { return const Scaffold( body: Center(child: CircularProgressIndicator()), ); } if (appState.onboardingComplete) { return LearningShell(state: appState); } if (onboardingStep == 0) { return WelcomePage( state: appState, onContinue: () => setState(() => onboardingStep = 1), ); } return PopScope( canPop: false, onPopInvokedWithResult: (didPop, _) { if (!didPop) { setState(() => onboardingStep = 0); } }, child: PlacementPage( state: appState, onBack: () => setState(() => onboardingStep = 0), onStart: () => appState.finishOnboarding(), ), ); }, ), ); } }