refactor: replace CachedNetworkImage with S3Image and simplify avatar URL resolution.
This commit is contained in:
@@ -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,
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
|||||||
Reference in New Issue
Block a user