fromPackageData static method
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,
);
}