ProjectContext constructor

ProjectContext({
  1. required String projectName,
  2. required String projectPath,
  3. required UITheme theme,
  4. required String primaryColor,
  5. required bool darkMode,
  6. String? customFont,
  7. required IconPack iconPack,
  8. required Architecture architecture,
  9. required StateManagement stateManagement,
  10. required Routing routing,
  11. String? backendUrl,
  12. required bool includeSplashOnboarding,
  13. required List<String> packages,
})

Implementation

ProjectContext({
  required this.projectName,
  required this.projectPath,
  required this.theme,
  required this.primaryColor,
  required this.darkMode,
  this.customFont,
  required this.iconPack,
  required this.architecture,
  required this.stateManagement,
  required this.routing,
  this.backendUrl,
  required this.includeSplashOnboarding,
  required this.packages,
}) {
  // Set default placeholder values
  templateReplacements['PROJECT_NAME'] = projectName;
  templateReplacements['PRIMARY_COLOR'] = primaryColor;
  templateReplacements['BASE_URL'] = backendUrl ?? 'https://api.example.com';
  templateReplacements['FONT_FAMILY'] = customFont ?? 'Outfit';

  // Core main.dart replacements
  templateReplacements['ROUTER_IMPORTS'] = '';
  templateReplacements['STATE_MANAGEMENT_IMPORTS'] = '';
  templateReplacements['THEME_IMPORTS'] = '';
  templateReplacements['STATE_MANAGEMENT_INIT'] = '';
  templateReplacements['STATE_MANAGEMENT_WRAPPER_START'] = '';
  templateReplacements['STATE_MANAGEMENT_WRAPPER_END'] = '';

  // Default routing & state placeholders for features
  templateReplacements['STATE_MANAGEMENT_IMPORT'] = '';
  templateReplacements['ROUTER_IMPORT'] = '';
  templateReplacements['PREFS_IMPORT'] = '';
  templateReplacements['PREFS_CHECK'] = 'bool completed = false;';
  templateReplacements['PREFS_SAVE'] = '';
  templateReplacements['HOME_VIEW_IMPORT'] = onboardingToHomeRelativeImport;
  templateReplacements['SPLASH_HOME_IMPORT'] = splashToHomeRelativeImport;
  templateReplacements['SPLASH_ONBOARDING_IMPORT'] = splashToOnboardingRelativeImport;

  templateReplacements['NAVIGATE_HOME'] = "Navigator.of(context).pushReplacement(MaterialPageRoute(builder: (context) => const HomeView()));";
  templateReplacements['NAVIGATE_ONBOARDING'] = "Navigator.of(context).pushReplacement(MaterialPageRoute(builder: (context) => const OnboardingView()));";

  templateReplacements['SPLASH_WIDGET_BASE_CLASS'] = 'StatefulWidget';
  templateReplacements['SPLASH_STATE_BASE_CLASS'] = 'State<SplashView>';
  templateReplacements['SPLASH_STATE_BASE_CLASS_SHORT'] = 'State<SplashView>';

  templateReplacements['ONBOARDING_WIDGET_BASE_CLASS'] = 'StatefulWidget';
  templateReplacements['ONBOARDING_STATE_BASE_CLASS'] = 'State<OnboardingView>';
  templateReplacements['ONBOARDING_STATE_BASE_CLASS_SHORT'] = 'State<OnboardingView>';

  // Configure main home screen routing based on Splash/Onboarding selection
  final homeWidget = includeSplashOnboarding ? 'const SplashView()' : 'const HomeView()';

  templateReplacements['APP_ROUTER_OR_MATERIAL_APP'] = '''
MaterialApp(
    title: '$projectName',
    theme: ThemeData(
      colorScheme: ColorScheme.fromSeed(seedColor: const Color(0xFF6200EE)),
      useMaterial3: true,
    ),
    home: $homeWidget,
  )''';
}