Refactor reliability statistics and score handling to support nullable values

This commit is contained in:
Achintha Isuru
2026-01-26 18:47:33 -05:00
parent 060036fe36
commit 22c9606079
3 changed files with 25 additions and 25 deletions

View File

@@ -105,15 +105,15 @@ class StaffProfilePage extends StatelessWidget {
child: Column( child: Column(
children: [ children: [
ReliabilityStatsCard( ReliabilityStatsCard(
totalShifts: profile.totalShifts ?? 0, totalShifts: profile.totalShifts,
averageRating: profile.averageRating ?? 0.0, averageRating: profile.averageRating,
onTimeRate: profile.onTimeRate ?? 0, onTimeRate: profile.onTimeRate,
noShowCount: profile.noShowCount ?? 0, noShowCount: profile.noShowCount,
cancellationCount: profile.cancellationCount ?? 0, cancellationCount: profile.cancellationCount,
), ),
const SizedBox(height: UiConstants.space6), const SizedBox(height: UiConstants.space6),
ReliabilityScoreBar( ReliabilityScoreBar(
reliabilityScore: profile.reliabilityScore ?? 100, reliabilityScore: profile.reliabilityScore,
), ),
const SizedBox(height: UiConstants.space6), const SizedBox(height: UiConstants.space6),
SectionTitle(i18n.sections.onboarding), SectionTitle(i18n.sections.onboarding),

View File

@@ -6,17 +6,17 @@ import 'package:design_system/design_system.dart';
/// ///
/// Uses design system tokens for all colors, typography, and spacing. /// Uses design system tokens for all colors, typography, and spacing.
class ReliabilityScoreBar extends StatelessWidget { class ReliabilityScoreBar extends StatelessWidget {
final int reliabilityScore; final int? reliabilityScore;
const ReliabilityScoreBar({ const ReliabilityScoreBar({
super.key, super.key,
required this.reliabilityScore, this.reliabilityScore,
}); });
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
final i18n = t.staff.profile.reliability_score; final i18n = t.staff.profile.reliability_score;
final score = reliabilityScore / 100; final score = (reliabilityScore ?? 0) / 100;
return Container( return Container(
padding: EdgeInsets.all(UiConstants.space4), padding: EdgeInsets.all(UiConstants.space4),
@@ -37,7 +37,7 @@ class ReliabilityScoreBar extends StatelessWidget {
), ),
), ),
Text( Text(
"$reliabilityScore%", "${reliabilityScore ?? 0}%",
style: UiTypography.headline4m.copyWith( style: UiTypography.headline4m.copyWith(
color: UiColors.primary, color: UiColors.primary,
), ),

View File

@@ -6,19 +6,19 @@ import 'package:design_system/design_system.dart';
/// ///
/// Uses design system tokens for all colors, typography, spacing, and icons. /// Uses design system tokens for all colors, typography, spacing, and icons.
class ReliabilityStatsCard extends StatelessWidget { class ReliabilityStatsCard extends StatelessWidget {
final int totalShifts; final int? totalShifts;
final double averageRating; final double? averageRating;
final int onTimeRate; final int? onTimeRate;
final int noShowCount; final int? noShowCount;
final int cancellationCount; final int? cancellationCount;
const ReliabilityStatsCard({ const ReliabilityStatsCard({
super.key, super.key,
required this.totalShifts, this.totalShifts,
required this.averageRating, this.averageRating,
required this.onTimeRate, this.onTimeRate,
required this.noShowCount, this.noShowCount,
required this.cancellationCount, this.cancellationCount,
}); });
@override @override
@@ -43,31 +43,31 @@ class ReliabilityStatsCard extends StatelessWidget {
_buildStatItem( _buildStatItem(
context, context,
LucideIcons.briefcase, LucideIcons.briefcase,
"$totalShifts", "${totalShifts ?? 0}",
"Shifts", "Shifts",
), ),
_buildStatItem( _buildStatItem(
context, context,
LucideIcons.star, LucideIcons.star,
averageRating.toStringAsFixed(1), (averageRating ?? 0.0).toStringAsFixed(1),
"Rating", "Rating",
), ),
_buildStatItem( _buildStatItem(
context, context,
LucideIcons.clock, LucideIcons.clock,
"$onTimeRate%", "${onTimeRate ?? 0}%",
"On Time", "On Time",
), ),
_buildStatItem( _buildStatItem(
context, context,
LucideIcons.xCircle, LucideIcons.xCircle,
"$noShowCount", "${noShowCount ?? 0}",
"No Shows", "No Shows",
), ),
_buildStatItem( _buildStatItem(
context, context,
LucideIcons.ban, LucideIcons.ban,
"$cancellationCount", "${cancellationCount ?? 0}",
"Cancel.", "Cancel.",
), ),
], ],