generate static method

String generate({
  1. required String projectName,
  2. required String stateManagement,
  3. required bool includeFirebase,
  4. required bool useRouter,
  5. required bool useTheme,
  6. bool includeLocalization = false,
})

Implementation

static String generate({
  required String projectName,
  required String stateManagement,
  required bool includeFirebase,
  required bool useRouter,
  required bool useTheme,
  bool includeLocalization = false,
}) {
  // --- Firebase imports block ---
  final firebaseImports = includeFirebase
      ? '''
import 'package:firebase_core/firebase_core.dart';
import 'firebase_options.dart';
'''
      : '';

  // --- Feature Service imports ---
  final featureServiceImports = '''
import 'package:$projectName/core/services/feature_service.dart';
''';

  // --- Localization imports block (your actual setup) ---
  final localizationImports = includeLocalization
      ? '''
import 'package:$projectName/l10n/app_localizations.dart';
import 'package:provider/provider.dart' as provider_pkg;
import 'package:$projectName/core/providers/locale_provider.dart';
'''
      : '';

  // --- Firebase init code in main() ---
  final firebaseInit = includeFirebase
      ? '''
// If you have selected Firebase but have not configured it yet, this will throw an error. Make sure to set up Firebase for your project.
await Firebase.initializeApp(
options: DefaultFirebaseOptions.currentPlatform,
);
'''
      : '';

  // --- Feature Service init code in main() ---
  final featureServiceInit = '''
await FeatureService.initialize();
''';

  // --- Localization config inside MaterialApp.router ---
  final localizationSupport = includeLocalization
      ? '''
    // Localization
    localizationsDelegates: AppLocalizations.localizationsDelegates,
    supportedLocales: AppLocalizations.supportedLocales,
    locale: localeProvider.locale,
'''
      : '';

  // State management specific code
  String stateManagementSetup = '';
  String appWidget = '';

  switch (stateManagement) {
    case 'riverpod':
      if (includeLocalization) {
        // riverpod + localization
        stateManagementSetup = '''
import 'package:flutter_riverpod/flutter_riverpod.dart';

void main() async {
WidgetsFlutterBinding.ensureInitialized();
$firebaseInit
$featureServiceInit
runApp(
  ProviderScope(
    child: provider_pkg.ChangeNotifierProvider(
      create: (_) => LocaleProvider(),
      child: const MyApp(),
    ),
  ),
);
}
''';
        appWidget = '''
class MyApp extends ConsumerWidget {
const MyApp({Key? key}) : super(key: key);

@override
Widget build(BuildContext context, WidgetRef ref) {
  final localeProvider = provider_pkg.Provider.of<LocaleProvider>(context);

  return MaterialApp.router(
    title: 'Flutter App',
    debugShowCheckedModeBanner: false,
    theme: AppTheme.lightTheme,
    darkTheme: AppTheme.darkTheme,
    themeMode: ThemeMode.system,
$localizationSupport
    routerConfig: appRouter,
  );
}
}
''';
      } else {
        // riverpod without localization
        stateManagementSetup = '''
import 'package:flutter_riverpod/flutter_riverpod.dart';

void main() async {
WidgetsFlutterBinding.ensureInitialized();
$firebaseInit
$featureServiceInit
runApp(const ProviderScope(child: MyApp()));
}
''';
        appWidget = '''
class MyApp extends ConsumerWidget {
const MyApp({Key? key}) : super(key: key);

@override
Widget build(BuildContext context, WidgetRef ref) {
  return MaterialApp.router(
    title: 'Flutter App',
    debugShowCheckedModeBanner: false,
    theme: AppTheme.lightTheme,
    darkTheme: AppTheme.darkTheme,
    themeMode: ThemeMode.system,
    routerConfig: appRouter,
  );
}
}
''';
      }
      break;

    case 'provider':
      if (includeLocalization) {
        stateManagementSetup = '''
import 'package:provider/provider.dart';

void main() async {
WidgetsFlutterBinding.ensureInitialized();
$firebaseInit
$featureServiceInit
runApp(
  ChangeNotifierProvider(
    create: (_) => LocaleProvider(),
    child: const MyApp(),
  ),
);
}
''';
        appWidget = '''
class MyApp extends StatelessWidget {
const MyApp({Key? key}) : super(key: key);

@override
Widget build(BuildContext context) {
  final localeProvider = Provider.of<LocaleProvider>(context);

  return MaterialApp.router(
    title: 'Flutter App',
    debugShowCheckedModeBanner: false,
    theme: AppTheme.lightTheme,
    darkTheme: AppTheme.darkTheme,
    themeMode: ThemeMode.system,
$localizationSupport
    routerConfig: appRouter,
  );
}
}
''';
      } else {
        stateManagementSetup = '''
import 'package:provider/provider.dart';

void main() async {
WidgetsFlutterBinding.ensureInitialized();
$firebaseInit
$featureServiceInit
runApp(const MyApp());
}
''';
        appWidget = '''
class MyApp extends StatelessWidget {
const MyApp({Key? key}) : super(key: key);

@override
Widget build(BuildContext context) {
  return MaterialApp.router(
    title: 'Flutter App',
    debugShowCheckedModeBanner: false,
    theme: AppTheme.lightTheme,
    darkTheme: AppTheme.darkTheme,
    themeMode: ThemeMode.system,
    routerConfig: appRouter,
  );
}
}
''';
      }
      break;

    case 'bloc':
      if (includeLocalization) {
        stateManagementSetup = '''
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:provider/provider.dart';

void main() async {
WidgetsFlutterBinding.ensureInitialized();
$firebaseInit
$featureServiceInit
runApp(
  ChangeNotifierProvider(
    create: (_) => LocaleProvider(),
    child: const MyApp(),
  ),
);
}
''';
        appWidget = '''
class MyApp extends StatelessWidget {
const MyApp({Key? key}) : super(key: key);

@override
Widget build(BuildContext context) {
  final localeProvider = Provider.of<LocaleProvider>(context);

  return MaterialApp.router(
    title: 'Flutter App',
    debugShowCheckedModeBanner: false,
    theme: AppTheme.lightTheme,
    darkTheme: AppTheme.darkTheme,
    themeMode: ThemeMode.system,
$localizationSupport
    routerConfig: appRouter,
  );
}
}
''';
      } else {
        stateManagementSetup = '''
import 'package:flutter_bloc/flutter_bloc.dart';

void main() async {
WidgetsFlutterBinding.ensureInitialized();
$firebaseInit
$featureServiceInit
runApp(const MyApp());
}
''';
        appWidget = '''
class MyApp extends StatelessWidget {
const MyApp({Key? key}) : super(key: key);

@override
Widget build(BuildContext context) {
  return MaterialApp.router(
    title: 'Flutter App',
    debugShowCheckedModeBanner: false,
    theme: AppTheme.lightTheme,
    darkTheme: AppTheme.darkTheme,
    themeMode: ThemeMode.system,
    routerConfig: appRouter,
  );
}
}
''';
      }
      break;

    default:
      if (includeLocalization) {
        stateManagementSetup = '''
import 'package:provider/provider.dart';

void main() async {
WidgetsFlutterBinding.ensureInitialized();
$firebaseInit
$featureServiceInit
runApp(
  ChangeNotifierProvider(
    create: (_) => LocaleProvider(),
    child: const MyApp(),
  ),
);
}
''';
        appWidget = '''
class MyApp extends StatelessWidget {
const MyApp({Key? key}) : super(key: key);

@override
Widget build(BuildContext context) {
  final localeProvider = Provider.of<LocaleProvider>(context);

  return MaterialApp.router(
    title: 'Flutter App',
    debugShowCheckedModeBanner: false,
    theme: AppTheme.lightTheme,
    darkTheme: AppTheme.darkTheme,
    themeMode: ThemeMode.system,
$localizationSupport
    routerConfig: appRouter,
  );
}
}
''';
      } else {
        stateManagementSetup = '''
void main() async {
WidgetsFlutterBinding.ensureInitialized();
$firebaseInit
$featureServiceInit
runApp(const MyApp());
}
''';
        appWidget = '''
class MyApp extends StatelessWidget {
const MyApp({Key? key}) : super(key: key);

@override
Widget build(BuildContext context) {
  return MaterialApp.router(
    title: 'Flutter App',
    debugShowCheckedModeBanner: false,
    theme: AppTheme.lightTheme,
    darkTheme: AppTheme.darkTheme,
    themeMode: ThemeMode.system,
    routerConfig: appRouter,
  );
}
}
''';
      }
  }

  return '''
import 'package:flutter/material.dart';
import 'package:$projectName/app/theme/app_theme.dart';
import 'package:$projectName/app/router/app_router.dart';
$firebaseImports$localizationImports$featureServiceImports
$stateManagementSetup

$appWidget
''';
}