import 'package:auto_route/auto_route.dart'; import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:trainhub_flutter/core/constants/ui_constants.dart'; import 'package:trainhub_flutter/core/router/app_router.dart'; import 'package:trainhub_flutter/core/theme/app_colors.dart'; import 'package:trainhub_flutter/presentation/settings/ai_model_settings_controller.dart'; import 'package:trainhub_flutter/presentation/settings/ai_model_settings_state.dart'; import 'package:trainhub_flutter/presentation/welcome/widgets/download_progress.dart'; import 'package:trainhub_flutter/presentation/welcome/widgets/initial_prompt.dart'; @RoutePage() class WelcomeScreen extends ConsumerStatefulWidget { const WelcomeScreen({super.key}); @override ConsumerState createState() => _WelcomeScreenState(); } class _WelcomeScreenState extends ConsumerState { bool _hasNavigated = false; @override void initState() { super.initState(); WidgetsBinding.instance.addPostFrameCallback((_) { ref .read(aiModelSettingsControllerProvider.notifier) .validateModels() .then((_) { if (!mounted) return; final validated = ref .read(aiModelSettingsControllerProvider) .areModelsValidated; if (validated) _navigateToApp(); }); }); } void _navigateToApp() { if (_hasNavigated) return; _hasNavigated = true; context.router.replace(const ShellRoute()); } @override Widget build(BuildContext context) { final modelState = ref.watch(aiModelSettingsControllerProvider); ref.listen(aiModelSettingsControllerProvider, (prev, next) { if (!_hasNavigated && next.areModelsValidated && !next.isDownloading) { _navigateToApp(); } }); return Scaffold( backgroundColor: AppColors.surface, body: Center( child: SizedBox( width: 560, child: AnimatedSwitcher( duration: UIConstants.animationDuration, child: modelState.isDownloading ? DownloadProgress(modelState: modelState) : InitialPrompt( onDownload: () => ref .read(aiModelSettingsControllerProvider.notifier) .downloadAll(), onSkip: _navigateToApp, ), ), ), ), ); } }