diff --git a/lib/features/messaging/presentation/screens/conversations_screen.dart b/lib/features/messaging/presentation/screens/conversations_screen.dart index f04d853..df7f3e7 100644 --- a/lib/features/messaging/presentation/screens/conversations_screen.dart +++ b/lib/features/messaging/presentation/screens/conversations_screen.dart @@ -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, ), )