generate method

  1. @override
Future<void> generate(
  1. ProjectContext context
)
override

Executes the plugin's code-generation and configuration logic.

Implementation

@override
Future<void> generate(ProjectContext context) async {
  // Run flutter create
  await Services.processService.runFlutterCreate(
    projectName: context.projectName,
    outputDirectory: context.projectPath,
  );

  // Clean up default boilerplate main.dart and widget_test.dart
  final mainFile = File('${context.projectPath}/lib/main.dart');
  if (mainFile.existsSync()) {
    mainFile.deleteSync();
  }

  final testFile = File('${context.projectPath}/test/widget_test.dart');
  if (testFile.existsSync()) {
    testFile.deleteSync();
  }

  // Create assets directories in project root
  Services.fileService.createDir('${context.projectPath}/assets/icons');
  Services.fileService.createDir('${context.projectPath}/assets/images');

  // Register assets and .env in pubspec.yaml
  final pubspecPath = '${context.projectPath}/pubspec.yaml';
  Services.yamlService.addAssets(pubspecPath, [
    'assets/icons/',
    'assets/images/',
    '.env',
  ]);

  // Write .env file to project root
  final envContent = 'API_URL=${context.backendUrl ?? 'https://api.example.com'}\n';
  Services.fileService.writeFile('${context.projectPath}/.env', envContent);

  // Add flutter_dotenv to dependencies
  Services.yamlService.addDependency(pubspecPath, 'flutter_dotenv', '^5.1.0');

  // Append .env to gitignore
  final gitignoreFile = File('${context.projectPath}/.gitignore');
  if (gitignoreFile.existsSync()) {
    var content = gitignoreFile.readAsStringSync();
    if (!content.contains('.env')) {
      content += '\n# Environments\n.env\n';
      gitignoreFile.writeAsStringSync(content);
    }
  }

  // Write config file to project root
  final configContent = '''{
"projectName": "${context.projectName}",
"architecture": "${context.architecture.name}",
"stateManagement": "${context.stateManagement.name}",
"routing": "${context.routing.name}",
"theme": "${context.theme.name}"
}
''';
  Services.fileService.writeFile('${context.projectPath}/.flutter_init_cli.json', configContent);
}