feat: implement dynamic field labels for agent profile sections using backend-provided slugs

This commit is contained in:
pradeepkumar
2026-04-15 15:57:52 +05:30
parent e88f190a5c
commit 7b85d321af
3 changed files with 28 additions and 8 deletions

View File

@@ -292,6 +292,26 @@ class AgentDetailState {
return '${'*' * (digits.length - 4)}${digits.substring(digits.length - 4)}';
}
// ── Dynamic labels (fieldName from backend, with fallback) ──
String _labelForSlug(String slug, String fallback) {
for (final fv in fieldValues) {
if (fv.fieldSlug == slug && fv.fieldName.isNotEmpty) {
return fv.fieldName;
}
}
return fallback;
}
String get availabilityLabel =>
_labelForSlug('availability', 'Availability');
String get workEnvironmentLabel =>
_labelForSlug('preferred_work_environment', 'Preferred Work Environment');
String get bestExperienceLabel =>
_labelForSlug('best_experience', 'Best Experience');
// ── Availability ──
String get availabilityType {

View File

@@ -999,7 +999,7 @@ class _AgentDetailScreenState extends ConsumerState<AgentDetailScreen> {
// Availability card (always show)
_buildInfoCard(
icon: Icons.access_time_filled,
title: 'Availability',
title: state.availabilityLabel,
subtitle: state.availabilityType.isNotEmpty
? state.availabilityType
: 'Not specified',
@@ -1012,7 +1012,7 @@ class _AgentDetailScreenState extends ConsumerState<AgentDetailScreen> {
// Work environment (always show)
_buildInfoCard(
icon: Icons.landscape_outlined,
title: 'Work Environment',
title: state.workEnvironmentLabel,
subtitle: '',
description: workEnv.isNotEmpty ? workEnv : 'Not specified',
isEmpty: workEnv.isEmpty,
@@ -1021,7 +1021,7 @@ class _AgentDetailScreenState extends ConsumerState<AgentDetailScreen> {
// Best experience (always show)
_buildInfoCard(
icon: Icons.star_rounded,
title: 'Best Experience',
title: state.bestExperienceLabel,
subtitle: '',
description: bestExp.isNotEmpty ? bestExp : 'Not specified',
isEmpty: bestExp.isEmpty,

View File

@@ -1052,7 +1052,7 @@ class _AgentHomeContentState extends ConsumerState<_AgentHomeContent> {
// Availability card (with title — matches web)
_buildInfoCard(
icon: Icons.access_time_filled,
title: 'Availability',
title: state.availabilityLabel,
subtitle: state.availabilityType.isNotEmpty
? state.availabilityType
: 'Not specified',
@@ -1062,18 +1062,18 @@ class _AgentHomeContentState extends ConsumerState<_AgentHomeContent> {
isEmpty: state.availabilityType.isEmpty,
),
const SizedBox(height: 16),
// Work environment (no title — matches web)
// Work environment
_buildInfoCard(
icon: Icons.landscape_outlined,
title: '',
title: state.workEnvironmentLabel,
subtitle: '',
description: workEnv,
),
const SizedBox(height: 16),
// Testimonial preview (no title — matches web)
// Testimonial preview
_buildInfoCard(
icon: Icons.star_rounded,
title: '',
title: state.bestExperienceLabel,
subtitle: '',
description: testimonialText.isNotEmpty
? '\u201C$testimonialText\u201D'