import 'package:flutter/material.dart'; import 'package:go_router/go_router.dart'; import 'package:miaoji_zhang/shared/services/current_ledger_store.dart'; import 'package:miaoji_zhang/shared/services/session_store.dart'; import 'package:miaoji_zhang/shared/theme/app_theme.dart'; import 'package:miaoji_zhang/shared/update/update_coordinator.dart'; import 'package:miaoji_zhang/shared/version.dart'; import 'package:miaoji_zhang/shared/widgets/brand_logo.dart'; class SplashPage extends StatefulWidget { const SplashPage({super.key}); @override State createState() => _SplashPageState(); } class _SplashPageState extends State { @override void initState() { super.initState(); _bootstrap(); } void _finishStartup(String location) { if (!mounted) return; context.go(location); UpdateCoordinator.instance.scheduleStartupCheck(); } Future _bootstrap() async { final session = SessionStore.instance; if (session.hasSession) { try { await CurrentLedgerStore.instance.loadCached(force: true); } catch (_) { // A damaged local cache must not leave the app trapped on the splash page. } } if (!mounted) return; if (!session.hasSession) { _finishStartup('/login'); return; } if (!session.onboardingDone && !session.shouldUseLocalOnly) { _finishStartup('/onboarding'); } else if (session.appMode == 'ai' && !session.shouldUseLocalOnly) { _finishStartup('/ai-mode'); } else { _finishStartup('/home'); } } @override Widget build(BuildContext context) { return Scaffold( body: Center( child: Column( mainAxisAlignment: MainAxisAlignment.center, children: [ const BrandLogo(size: 90), SizedBox(height: 24), CircularProgressIndicator(strokeWidth: 2, color: AppTheme.primary), SizedBox(height: 16), Text( AppVersion.display, style: TextStyle(fontSize: 10, color: context.jz.text3), ), ], ), ), ); } }