run method
Runs this command.
The return value is wrapped in a Future if necessary and returned by
CommandRunner.runCommand.
Implementation
@override
Future<void> run() async {
final projectDir = findNitroProjectRoot();
if (projectDir == null) {
stderr.writeln('❌ No Nitro project found in . or its subdirectories (must have nitro dependency in pubspec.yaml).');
exit(1);
}
// Change working directory so that doctor checks (File('ios'), etc) work correctly.
final originalCwd = Directory.current;
Directory.current = projectDir;
if (projectDir.path != originalCwd.path) {
stdout.writeln(' \x1B[90m📂 Found project in: ${projectDir.path}\x1B[0m');
}
final result = performChecks(root: projectDir);
await runApp(
DoctorView(
pluginName: result.pluginName,
sections: result.sections,
errors: result.errors,
warnings: result.warnings,
errorMessage: result.errorMessage,
),
);
// Print persistent one-liner after TUI exits
if (result.errorMessage == null) {
if (result.errors == 0 && result.warnings == 0) {
stdout.writeln(' \x1B[1;32m✨ ${result.pluginName} — all checks passed\x1B[0m');
} else if (result.errors > 0) {
stdout.writeln(
' \x1B[1;31m✘ ${result.pluginName} — ${result.errors} error(s)'
'${result.warnings > 0 ? ", ${result.warnings} warning(s)" : ""}\x1B[0m',
);
} else {
stdout.writeln(' \x1B[1;33m⚠ ${result.pluginName} — ${result.warnings} warning(s)\x1B[0m');
}
stdout.writeln('');
}
exit(result.errors > 0 ? 1 : 0);
}