選択できるのは25トピックまでです。 トピックは、先頭が英数字で、英数字とダッシュ('-')を使用した35文字以内のものにしてください。

143 行
5.5KB

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