ProjectContext constructor
ProjectContext({
- required String projectName,
- required String projectPath,
- required UITheme theme,
- required String primaryColor,
- required bool darkMode,
- String? customFont,
- required IconPack iconPack,
- required Architecture architecture,
- required StateManagement stateManagement,
- required Routing routing,
- String? backendUrl,
- required bool includeSplashOnboarding,
- 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,
)''';
}