import 'package:auto_route/auto_route.dart'; import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:google_fonts/google_fonts.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/widgets/ai_models_section.dart'; import 'package:trainhub_flutter/presentation/settings/widgets/knowledge_base_section.dart'; import 'package:trainhub_flutter/presentation/settings/widgets/settings_top_bar.dart'; @RoutePage() class SettingsPage extends ConsumerWidget { const SettingsPage({super.key}); @override Widget build(BuildContext context, WidgetRef ref) { final modelState = ref.watch(aiModelSettingsControllerProvider); final controller = ref.read(aiModelSettingsControllerProvider.notifier); return Scaffold( backgroundColor: AppColors.surface, body: Column( children: [ SettingsTopBar(onBack: () => context.router.maybePop()), Expanded( child: SingleChildScrollView( padding: const EdgeInsets.all(UIConstants.pagePadding), child: Center( child: ConstrainedBox( constraints: const BoxConstraints(maxWidth: 680), child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Text( 'Settings', style: GoogleFonts.inter( fontSize: 22, fontWeight: FontWeight.w700, color: AppColors.textPrimary, letterSpacing: -0.3, ), ), const SizedBox(height: UIConstants.spacing32), AiModelsSection( modelState: modelState, onDownload: controller.downloadAll, onValidate: controller.validateModels, ), const SizedBox(height: UIConstants.spacing32), KnowledgeBaseSection( onTap: () => context.router.push(const KnowledgeBaseRoute()), ), ], ), ), ), ), ), ], ), ); } }