execute method

  1. @override
Future<int> execute(
  1. List<String> arguments
)
override

Executes the command with the provided arguments. Returns an integer exit code (0 for success).

Implementation

@override
Future<int> execute(List<String> arguments) async {
  final ArgResults results;
  try {
    results = _argParser.parse(arguments);
  } on FormatException catch (e) {
    throw ValidationException(
      'Error: ${e.message}\n\nUsage:\n  flutter_setup feature <feature_name> [--path <path>]',
    );
  }

  if (results.rest.isEmpty) {
    throw const ValidationException(
      'Error: Feature name is required.\n\nUsage:\n  flutter_setup feature <feature_name> [--path <path>]',
    );
  }

  final rawFeatureName = results.rest.first;
  final targetPath = results['path'] as String? ?? '.';

  final vars = VariableResolver.resolveFeature(rawFeatureName: rawFeatureName);
  final featurePascal = vars['feature_name_pascal_case']!;
  final featureSnake = vars['feature_name_snake_case']!;

  final renderResult = await _generator.generateFeature(
    rawFeatureName: rawFeatureName,
    projectPath: targetPath,
  );

  _output.success('Generated feature "$featurePascal" in lib/features/$featureSnake');
  for (final file in renderResult.createdFiles) {
    _output.info('  - $file');
  }

  _output.info(
    '\nDon\'t forget to add a route for ${featurePascal}Screen in lib/core/router/app_router.dart',
  );

  return 0;
}