refactor: replace CachedNetworkImage with S3Image and simplify avatar URL resolution.

This commit is contained in:
pradeepkumar
2026-03-19 04:24:40 +05:30
parent 21e677bf27
commit 2494bdc868

View File

@@ -1,10 +1,9 @@
import 'package:cached_network_image/cached_network_image.dart';
import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:go_router/go_router.dart';
import 'package:shimmer/shimmer.dart';
import 'package:real_estate_mobile/config/app_config.dart';
import 'package:real_estate_mobile/core/constants/app_colors.dart';
import 'package:real_estate_mobile/core/widgets/s3_image.dart';
import 'package:real_estate_mobile/features/messaging/data/models/messaging_models.dart';
import 'package:real_estate_mobile/features/messaging/presentation/providers/messaging_provider.dart';
@@ -400,22 +399,14 @@ class _ConversationTile extends StatelessWidget {
return text;
}
String _resolveAvatarUrl(String? avatarKey) {
if (avatarKey == null || avatarKey.isEmpty) return '';
if (avatarKey.startsWith('http://') || avatarKey.startsWith('https://')) {
return avatarKey;
}
final base = AppConfig.storageBaseUrl;
if (avatarKey.startsWith('/uploads')) {
return '$base$avatarKey';
}
return '$base/$avatarKey';
bool _hasAvatar(String? avatarKey) {
return avatarKey != null && avatarKey.isNotEmpty;
}
@override
Widget build(BuildContext context) {
final otherParty = conversation.otherParty;
final avatarUrl = _resolveAvatarUrl(otherParty.avatar);
final hasAvatarImage = _hasAvatar(otherParty.avatar);
final lastMessage = _formatPreview(conversation.lastMessageText ?? '');
final timestamp = _formatTimestamp(conversation.lastMessageAt);
final unread = conversation.unreadCount;
@@ -444,17 +435,13 @@ class _ConversationTile extends StatelessWidget {
),
),
child: ClipOval(
child: avatarUrl.isNotEmpty
? CachedNetworkImage(
imageUrl: avatarUrl,
child: hasAvatarImage
? S3Image(
imageUrl: otherParty.avatar!,
width: 56,
height: 56,
fit: BoxFit.cover,
placeholder: (context, url) => _AvatarFallback(
letter: firstLetter,
),
errorWidget: (context, url, err) =>
_AvatarFallback(
errorWidget: (_) => _AvatarFallback(
letter: firstLetter,
),
)