run method

  1. @override
Future<int> run()
override

Runs this command.

The return value is wrapped in a Future if necessary and returned by CommandRunner.runCommand.

Implementation

@override
Future<int> run() async {
  final rest = argResults!.rest;
  if (rest.isEmpty) {
    Logger.error('Screen name is required.');
    Logger.plain('');
    Logger.plain('Usage: $invocation');
    Logger.plain('Example: srik add screen settings --feature home');
    return 64;
  }

  final screenName = rest.first;
  final feature = argResults!['feature'] as String;

  final screenError = Validators.featureName(screenName);
  if (screenError != null) {
    Logger.error(screenError);
    return 64;
  }

  final ctx = ProjectContext.load(Directory.current.path);
  if (ctx == null) {
    Logger.error(
      'No srik.yaml found. Run this command inside a project '
      'created with `srik create`.',
    );
    return 1;
  }

  try {
    FeatureGenerator().generateScreen(ctx, screenName, feature: feature);
    return 0;
  } on StateError catch (e) {
    Logger.error(e.message);
    return 1;
  } catch (e) {
    Logger.error('Failed to generate screen: $e');
    return 1;
  }
}