fromPackageData static method

PackageMetrics fromPackageData({
  1. required String name,
  2. required int grantedPoints,
  3. required int maxPoints,
  4. required int popularity,
  5. required int likes,
  6. String? publisher,
  7. DateTime? lastUpdated,
  8. double? descriptionScore,
})

Implementation

static PackageMetrics fromPackageData({
  required String name,
  required int grantedPoints,
  required int maxPoints,
  required int popularity,
  required int likes,
  String? publisher,
  DateTime? lastUpdated,
  double? descriptionScore, // Add this parameter
}) {
  final strengths = <String>[];
  final weaknesses = <String>[];

  if (grantedPoints >= 130) strengths.add('High quality');
  if (popularity >= 90) strengths.add('Very popular');
  if (likes > 500) strengths.add('Community favorite');
  if (publisher != null &&
      (publisher.contains('dart.dev') || publisher.contains('flutter.dev'))) {
    strengths.add('Official package');
  }
  if (descriptionScore != null && descriptionScore >= 0.8) {
    strengths.add('Perfect match for requirements');
  }

  if (grantedPoints < 100) weaknesses.add('Lower quality score');
  if (popularity < 50) weaknesses.add('Less popular');
  if (likes < 50) weaknesses.add('Limited community adoption');
  if (descriptionScore != null && descriptionScore < 0.5) {
    weaknesses.add('May not fully match requirements');
  }

  double recencyScore = 1.0;
  if (lastUpdated != null) {
    final daysSinceUpdate = DateTime.now().difference(lastUpdated).inDays;
    if (daysSinceUpdate > 730) {
      recencyScore = 0.3;
      weaknesses.add('Not recently updated');
    } else if (daysSinceUpdate > 365) {
      recencyScore = 0.6;
    } else if (daysSinceUpdate > 180) {
      recencyScore = 0.8;
    }
  }

  return PackageMetrics(
    name: name,
    pubPoints: grantedPoints,
    popularity: popularity,
    likes: likes,
    recencyScore: recencyScore,
    descriptionScore: descriptionScore ?? 0.0,
    isOfficial: publisher != null &&
        (publisher.contains('dart.dev') || publisher.contains('flutter.dev')),
    strengths: strengths,
    weaknesses: weaknesses,
  );
}