WeeklyChallengeCard constructor

WeeklyChallengeCard({
  1. Key? key,
  2. required String title,
  3. required DateTime expiresAt,
  4. required int currentProgress,
  5. required int targetProgress,
  6. required List<ChallengeMilestone> milestones,
  7. String? subtitle,
  8. VoidCallback? onTap,
  9. ValueChanged<int>? onClaimMilestone,
  10. VoidCallback? onExpired,
  11. Color? color,
  12. double? width,
  13. double height = 156,
  14. String? semanticLabel,
})

Implementation

WeeklyChallengeCard({
  super.key,
  required this.title,
  required this.expiresAt,
  required this.currentProgress,
  required this.targetProgress,
  required this.milestones,
  this.subtitle,
  this.onTap,
  this.onClaimMilestone,
  this.onExpired,
  this.color,
  this.width,
  this.height = 156,
  this.semanticLabel,
}) {
  if (title.trim().isEmpty) {
    throw ArgumentError.value(title, 'title', 'must not be empty');
  }
  if (targetProgress <= 0) {
    throw ArgumentError.value(
      targetProgress,
      'targetProgress',
      'must be positive',
    );
  }
  if (currentProgress < 0) {
    throw ArgumentError.value(
      currentProgress,
      'currentProgress',
      'must be non-negative',
    );
  }
  if (milestones.isEmpty || milestones.length > 3) {
    throw ArgumentError.value(
      milestones.length,
      'milestones.length',
      'must have 1 to 3 milestones',
    );
  }
  var previous = 0;
  for (var i = 0; i < milestones.length; i++) {
    final milestone = milestones[i];
    if (milestone.target <= previous || milestone.target > targetProgress) {
      throw ArgumentError.value(
        milestone.target,
        'milestones[$i].target',
        'must be strictly increasing and no greater than targetProgress',
      );
    }
    previous = milestone.target;
  }
  if (!height.isFinite || height <= 0) {
    throw ArgumentError.value(
      height,
      'height',
      'must be finite and positive',
    );
  }
  if (width != null && (!width!.isFinite || width! <= 0)) {
    throw ArgumentError.value(width, 'width', 'must be finite and positive');
  }
}