Du kan inte välja fler än 25 ämnen Ämnen måste starta med en bokstav eller siffra, kan innehålla bindestreck ('-') och vara max 35 tecken långa.

154 lines
6.2KB

  1. // lib/main.dart
  2. import 'dart:io';
  3. import 'package:flutter/material.dart';
  4. // --- IMPORTS MANQUANTS AJOUTÉS ---
  5. import 'package:social_content_creator/repositories/ai_repository.dart';
  6. // Les autres imports d'écrans sont corrects
  7. import 'package:social_content_creator/presentation/screens/ai_enhancement/ai_enhancement_screen.dart';
  8. import 'package:social_content_creator/presentation/screens/export/export_screen.dart';
  9. import 'package:social_content_creator/presentation/screens/home/login_screen.dart';
  10. import 'package:social_content_creator/presentation/screens/home/home_screen.dart';
  11. import 'package:social_content_creator/presentation/screens/image_preview/image_preview_screen.dart';
  12. import 'package:social_content_creator/presentation/screens/media_picker/media_picker_screen.dart';
  13. import 'package:social_content_creator/presentation/screens/post_preview/post_preview_screen.dart';
  14. import 'package:social_content_creator/presentation/screens/post_refinement/post_refinement_screen.dart';
  15. import 'package:social_content_creator/presentation/screens/profile_setup/profile_setup_screen.dart';
  16. import 'package:social_content_creator/presentation/screens/text_generation/text_generation_screen.dart';
  17. import 'package:social_content_creator/routes/app_routes.dart';
  18. void main() {
  19. runApp(const MyApp());
  20. }
  21. class MyApp extends StatelessWidget {
  22. const MyApp({super.key});
  23. static const bool _devSkipLogin = true;
  24. @override
  25. Widget build(BuildContext context) {
  26. final Color seedColor = Colors.blue;
  27. return MaterialApp(
  28. title: 'Social Content Creator',
  29. theme: ThemeData(
  30. colorScheme: ColorScheme.fromSeed(
  31. seedColor: seedColor,
  32. brightness: Brightness.light,
  33. ),
  34. useMaterial3: true,
  35. ),
  36. darkTheme: ThemeData(
  37. colorScheme: ColorScheme.fromSeed(
  38. seedColor: seedColor,
  39. brightness: Brightness.dark,
  40. ),
  41. useMaterial3: true,
  42. ),
  43. themeMode: ThemeMode.system,
  44. debugShowCheckedModeBanner: false,
  45. initialRoute: _devSkipLogin ? AppRoutes.home : AppRoutes.login,
  46. // --- GESTIONNAIRE DE ROUTES ENTIÈREMENT CORRIGÉ ET COMPLÉTÉ ---
  47. onGenerateRoute: (settings) {
  48. switch (settings.name) {
  49. // --- Routes simples sans arguments ---
  50. case '/':
  51. case AppRoutes.login:
  52. return MaterialPageRoute(builder: (_) => const LoginScreen());
  53. case AppRoutes.home:
  54. return MaterialPageRoute(builder: (_) => const HomeScreen());
  55. case AppRoutes.profileSetup:
  56. return MaterialPageRoute(builder: (_) => const ProfileSetupScreen());
  57. case AppRoutes.mediaPicker:
  58. return MaterialPageRoute(builder: (_) => const MediaPickerScreen());
  59. case AppRoutes.export:
  60. return MaterialPageRoute(builder: (_) => const ExportScreen());
  61. // --- Routes avec arguments ---
  62. case AppRoutes.aiEnhancement:
  63. if (settings.arguments is Map<String, dynamic>) {
  64. final args = settings.arguments as Map<String, dynamic>;
  65. if (args.containsKey('image') &&
  66. args['image'] is File &&
  67. args.containsKey('prompt') &&
  68. args['prompt'] is String) {
  69. return MaterialPageRoute(
  70. builder: (_) => AiEnhancementScreen(
  71. image: args['image']!,
  72. prompt: args['prompt']!,
  73. ),
  74. );
  75. }
  76. }
  77. return _errorRoute("Arguments invalides pour AiEnhancementScreen.");
  78. case AppRoutes.imagePreview:
  79. if (settings.arguments is String) {
  80. final imageBase64 = settings.arguments as String;
  81. return MaterialPageRoute(
  82. builder: (_) => ImagePreviewScreen(imageBase64: imageBase64),
  83. );
  84. }
  85. return _errorRoute("Argument (String) invalide pour ImagePreviewScreen");
  86. case AppRoutes.textGeneration:
  87. final args = settings.arguments;
  88. if (args is Map<String, dynamic>) {
  89. final imageBase64 = args['imageBase64'] as String?;
  90. final aiRepository = args['aiRepository'] as AiRepository?;
  91. if (imageBase64 != null && aiRepository != null) {
  92. return MaterialPageRoute(
  93. builder: (_) => TextGenerationScreen(
  94. arguments: TextGenerationScreenArguments(
  95. imageBase64: imageBase64,
  96. aiRepository: aiRepository,
  97. ),
  98. ),
  99. );
  100. }
  101. }
  102. // L'erreur était ici : il manquait le cas de fallback
  103. return _errorRoute("Arguments invalides pour TextGenerationScreen.");
  104. // --- ROUTE MANQUANTE AJOUTÉE ---
  105. case AppRoutes.postRefinement:
  106. if (settings.arguments is PostRefinementScreenArguments) {
  107. final args = settings.arguments as PostRefinementScreenArguments;
  108. return MaterialPageRoute(
  109. builder: (_) => PostRefinementScreen(arguments: args),
  110. );
  111. }
  112. return _errorRoute("Arguments (PostRefinementScreenArguments) invalides pour PostRefinementScreen.");
  113. // --- ROUTE MANQUANTE AJOUTÉE ---
  114. case AppRoutes.postPreview:
  115. if (settings.arguments is PostPreviewArguments) {
  116. final args = settings.arguments as PostPreviewArguments;
  117. return MaterialPageRoute(
  118. builder: (_) => PostPreviewScreen(arguments: args),
  119. );
  120. }
  121. return _errorRoute("Arguments (PostPreviewArguments) invalides pour PostPreviewScreen.");
  122. default:
  123. return _errorRoute("Route non trouvée: ${settings.name}");
  124. }
  125. },
  126. );
  127. }
  128. // Méthode helper pour afficher une page d'erreur propre
  129. MaterialPageRoute _errorRoute(String message) {
  130. return MaterialPageRoute(
  131. builder: (_) => Scaffold(
  132. appBar: AppBar(title: const Text('Erreur de Navigation')),
  133. body: Center(
  134. child: Padding(
  135. padding: const EdgeInsets.all(16.0),
  136. child: Text(message, textAlign: TextAlign.center),
  137. )),
  138. ),
  139. );
  140. }
  141. }