flutter_quality_analyzer 2.2.3
flutter_quality_analyzer: ^2.2.3 copied to clipboard
CLI analyzer for Flutter/Dart dependencies, security, coverage, and AI health summary.
example/flutter_quality_analyzer_example.dart
import 'package:flutter_quality_analyzer/flutter_quality_analyzer.dart';
/// This example demonstrates how to use flutter_quality_analyzer
/// programmatically in your own Dart code.
///
/// To run this example:
/// dart run example/flutter_quality_analyzer_example.dart
///
/// Or use the CLI directly (after `dart pub global activate flutter_quality_analyzer`):
/// fqa --path /path/to/your/flutter_project
/// fqa --path . --coverage
/// fqa --path . --security
/// fqa --path . --ai-summary --gemini-key YOUR_KEY
/// fqa --path . --coverage --security --ai-summary --gemini-key YOUR_KEY
void main() async {
// ─── 1. Read pubspec.yaml from a Flutter project ──────────────────────────
final reader = PubspecReader();
final result = reader.read('.'); // '.' = current directory
if (result.isFailure) {
Logger.error(result.error!);
return;
}
final pubspec = result.value!;
Logger.info('Project : ${pubspec.projectName}');
Logger.info('Found : ${pubspec.dependencies.length} dependencies');
if (pubspec.dependencies.isEmpty) {
Logger.warn('No dependencies to analyze.');
return;
}
// ─── 2. Fetch versions + license + pub score from pub.dev ─────────────────
final client = PubDevClient();
final checker = VersionChecker();
Logger.info('Checking versions, licenses & scores from pub.dev...');
final results = await checker.checkAll(
dependencies: pubspec.dependencies,
client: client,
);
client.dispose();
// ─── 3. Analyze test coverage ─────────────────────────────────────────────
final coverage = CoverageAnalyzer().analyze('.');
// ─── 4. Print results to console ──────────────────────────────────────────
final reporter = ConsoleReporter();
reporter.report(results);
final outdated = results.where((r) => r.isOutdated).length;
final upToDate =
results.where((r) => !r.isOutdated && r.error == null).length;
final failed = results.where((r) => r.error != null).length;
reporter.printSummary(
total: results.length,
outdated: outdated,
upToDate: upToDate,
failed: failed,
);
reporter.printCoverage(coverage);
// ─── 5. Optional: check for known vulnerabilities via OSV ─────────────────
// final osvMap = await OsvClient().checkAll(results, resolvedVersions);
// ─── 6. Optional: AI summary via Gemini or Groq (needs a free API key) ────
// Get a free Gemini key at: https://aistudio.google.com/app/apikey
// Get a free Groq key at: https://console.groq.com
//
// final summaryResult = await AiSummaryService().generateSummary(
// projectName: pubspec.projectName,
// results: results,
// coverage: coverage,
// provider: 'gemini',
// geminiKey: 'YOUR_GEMINI_API_KEY',
// );
//
// if (summaryResult.isSuccess) {
// reporter.printAiSummary(summaryResult.value!);
// }
// ─── 7. Or use JsonReporter for machine-readable output ───────────────────
// final jsonReporter = JsonReporter();
// jsonReporter.printFullReport(
// projectName: pubspec.projectName,
// results: results,
// total: results.length,
// outdated: outdated,
// upToDate: upToDate,
// failed: failed,
// discontinued: 0,
// vulnerable: 0,
// coverage: coverage,
// );
}