runProjectCommand method

  1. @override
Future<void> runProjectCommand()
override

Implementation

@override
Future<void> runProjectCommand() async {
  final engine = DoctorEngine(context);
  final result = await engine.runAllScans();

  final scoreEngine = ScoreEngine(context);
  final catScores = scoreEngine.calculateDetailedScore(result.issues);
  final totalScore = scoreEngine.calculateTotalScore(catScores);

  final report = ReportModel(
    totalScore: totalScore,
    categoryScores: catScores,
    issues: result.issues,
    metrics: result.metrics,
  );

  context.logger.info('');
  context.logger.info('========== FLUTTER DOCTOR PRO ==========');
  context.logger.info('Project: ${context.pubspec?["name"] ?? "Unknown"}');
  context.logger.info('Total Score: $totalScore/100');
  context.logger.info('');

  for (final categoryScore in catScores.values) {
    context.logger.info(
      '${categoryScore.category}: ${categoryScore.score}/100 (Weight: ${categoryScore.weight})',
    );
  }
  context.logger.info('');

  if (result.issues.isEmpty) {
    context.logger.success(
      'No issues found! Your project is perfectly healthy.',
    );
  } else {
    context.logger.info('--- Issues Found ---');
    for (final issue in result.issues) {
      context.logger.logIssue(issue);
    }
  }

  final reporter = ReportGenerator(context);
  await reporter.generateAll(report);

  if (totalScore < context.config.scoreMinimum) {
    context.logger.error(
      'Project score $totalScore is below the required minimum of ${context.config.scoreMinimum}.',
    );
    throw ProjectDoctorException('Score below minimum threshold.');
  }
}