feat: add id field to professional models and enable navigation to agent detail pages

This commit is contained in:
pradeepkumar
2026-04-20 10:32:12 +05:30
parent eafa595438
commit d3f23f9c53
3 changed files with 33 additions and 2 deletions

View File

@@ -63,6 +63,7 @@ class TopProfessionalsContent {
}
class ProfessionalItem {
final String? id;
final String name;
final String subtitle;
final String location;
@@ -72,6 +73,7 @@ class ProfessionalItem {
final double rating;
const ProfessionalItem({
this.id,
required this.name,
this.subtitle = '',
this.location = '',
@@ -83,6 +85,7 @@ class ProfessionalItem {
factory ProfessionalItem.fromJson(Map<String, dynamic> json) {
return ProfessionalItem(
id: json['id'] as String?,
name: json['name'] as String? ?? '',
subtitle: json['subtitle'] as String? ?? '',
location: json['location'] as String? ?? '',
@@ -127,6 +130,7 @@ class HeroContent {
// --- Features Section ---
class FeaturedAgentItem {
final String? id;
final String name;
final String role;
final String rating;
@@ -135,6 +139,7 @@ class FeaturedAgentItem {
final String imageUrl;
const FeaturedAgentItem({
this.id,
this.name = '',
this.role = '',
this.rating = '',
@@ -145,6 +150,7 @@ class FeaturedAgentItem {
factory FeaturedAgentItem.fromJson(Map<String, dynamic> json) {
return FeaturedAgentItem(
id: json['id'] as String?,
name: json['name'] as String? ?? '',
role: json['role'] as String? ?? '',
rating: json['rating'] as String? ?? '',

View File

@@ -1,6 +1,7 @@
import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:flutter_svg/flutter_svg.dart';
import 'package:go_router/go_router.dart';
import 'package:shimmer/shimmer.dart';
import 'package:real_estate_mobile/core/constants/app_colors.dart';
import 'package:real_estate_mobile/core/widgets/s3_image.dart';
@@ -141,7 +142,7 @@ class _FeaturedProfessionalsSectionState
}
Widget _buildFeaturedCard(FeaturedAgentItem item, int index) {
return Container(
final card = Container(
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.circular(15),
@@ -306,6 +307,18 @@ class _FeaturedProfessionalsSectionState
],
),
);
if (item.id != null && item.id!.isNotEmpty) {
return Material(
color: Colors.transparent,
child: InkWell(
borderRadius: BorderRadius.circular(15),
onTap: () => context.push('/agents/detail/${item.id}'),
child: card,
),
);
}
return card;
}
Widget _buildImagePlaceholder(int index) {

View File

@@ -300,7 +300,7 @@ class _TopProfessionalsSectionState
final locationText = item.location;
final subtitle = item.subtitle.isNotEmpty ? '(${item.subtitle})' : '';
return Container(
final card = Container(
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.circular(15),
@@ -538,6 +538,18 @@ class _TopProfessionalsSectionState
],
),
);
if (item.id != null && item.id!.isNotEmpty) {
return Material(
color: Colors.transparent,
child: InkWell(
borderRadius: BorderRadius.circular(15),
onTap: () => context.push('/agents/detail/${item.id}'),
child: card,
),
);
}
return card;
}
Widget _buildShimmerCards() {