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