diff --git a/lib/pages/message/conversation_tab.dart b/lib/pages/message/conversation_tab.dart index 930c780..21d0657 100644 --- a/lib/pages/message/conversation_tab.dart +++ b/lib/pages/message/conversation_tab.dart @@ -5,6 +5,7 @@ import 'package:get/get.dart'; import 'package:tdesign_flutter/tdesign_flutter.dart'; import 'package:im_flutter_sdk/im_flutter_sdk.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; +import 'package:cached_network_image/cached_network_image.dart'; import '../../controller/message/conversation_controller.dart'; import '../../widget/message/emoji_text_widget.dart'; import '../../config/emoji_config.dart'; @@ -140,27 +141,36 @@ class _ConversationTabState extends State height: 56, decoration: BoxDecoration( borderRadius: BorderRadius.circular(28), - image: (userInfo?.avatarUrl != null && userInfo!.avatarUrl!.isNotEmpty) - ? DecorationImage( - image: NetworkImage(userInfo.avatarUrl!), + color: Colors.grey[300], + ), + child: ClipRRect( + borderRadius: BorderRadius.circular(28), + child: (userInfo?.avatarUrl != null && userInfo!.avatarUrl!.isNotEmpty) + ? CachedNetworkImage( + imageUrl: userInfo.avatarUrl!, + width: 56, + height: 56, fit: BoxFit.cover, + placeholder: (context, url) => Image.asset( + Assets.imagesUserAvatar, + width: 56, + height: 56, + fit: BoxFit.cover, + ), + errorWidget: (context, url, error) => Image.asset( + Assets.imagesUserAvatar, + width: 56, + height: 56, + fit: BoxFit.cover, + ), ) - : null, - color: (userInfo?.avatarUrl == null || (userInfo?.avatarUrl?.isEmpty ?? true)) - ? Colors.grey[300] - : null, - ), - child: (userInfo?.avatarUrl == null || (userInfo?.avatarUrl?.isEmpty ?? true)) - ? ClipRRect( - borderRadius: BorderRadius.circular(28), - child: Image.asset( + : Image.asset( Assets.imagesUserAvatar, width: 56, height: 56, fit: BoxFit.cover, ), - ) - : null, + ), ), const SizedBox(width: 12), Expanded( diff --git a/lib/widget/live/live_room_chat_item.dart b/lib/widget/live/live_room_chat_item.dart index a71348f..a5247b4 100644 --- a/lib/widget/live/live_room_chat_item.dart +++ b/lib/widget/live/live_room_chat_item.dart @@ -7,6 +7,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:flutter_smart_dialog/flutter_smart_dialog.dart'; import 'package:get/get.dart'; +import 'package:cached_network_image/cached_network_image.dart'; import '../../pages/message/chat_page.dart'; @@ -258,18 +259,21 @@ class LiveRoomChatItem extends StatelessWidget { // 头像 ClipOval( child: message.avatar != null && message.avatar!.isNotEmpty - ? Image.network( - message.avatar!, + ? CachedNetworkImage( + imageUrl: message.avatar!, width: 25.w, height: 25.w, fit: BoxFit.cover, - errorBuilder: (context, error, stackTrace) { - return Image.asset( - Assets.imagesUserAvatar, - width: 25.w, - height: 25.w, - ); - }, + placeholder: (context, url) => Image.asset( + Assets.imagesUserAvatar, + width: 25.w, + height: 25.w, + ), + errorWidget: (context, url, error) => Image.asset( + Assets.imagesUserAvatar, + width: 25.w, + height: 25.w, + ), ).onTap(() { _showUserProfileDialog(context); }) diff --git a/lib/widget/message/call_item.dart b/lib/widget/message/call_item.dart index 5d9edea..5f93448 100644 --- a/lib/widget/message/call_item.dart +++ b/lib/widget/message/call_item.dart @@ -3,6 +3,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:im_flutter_sdk/im_flutter_sdk.dart'; import 'package:get/get.dart'; +import 'package:cached_network_image/cached_network_image.dart'; import '../../generated/assets.dart'; import '../../controller/global.dart'; @@ -309,19 +310,23 @@ class CallItem extends StatelessWidget { return ClipOval( child: avatarUrl != null && avatarUrl.isNotEmpty - ? Image.network( - avatarUrl, + ? CachedNetworkImage( + imageUrl: avatarUrl, width: 40.w, height: 40.w, fit: BoxFit.cover, - errorBuilder: (context, error, stackTrace) { - return Image.asset( - Assets.imagesUserAvatar, - width: 40.w, - height: 40.w, - fit: BoxFit.cover, - ); - }, + placeholder: (context, url) => Image.asset( + Assets.imagesUserAvatar, + width: 40.w, + height: 40.w, + fit: BoxFit.cover, + ), + errorWidget: (context, url, error) => Image.asset( + Assets.imagesUserAvatar, + width: 40.w, + height: 40.w, + fit: BoxFit.cover, + ), ) : Image.asset( Assets.imagesUserAvatar, diff --git a/lib/widget/message/gift_item.dart b/lib/widget/message/gift_item.dart index ece218e..8c2590e 100644 --- a/lib/widget/message/gift_item.dart +++ b/lib/widget/message/gift_item.dart @@ -288,19 +288,23 @@ class GiftItem extends StatelessWidget { return ClipOval( child: avatarUrl != null && avatarUrl.isNotEmpty - ? Image.network( - avatarUrl, + ? CachedNetworkImage( + imageUrl: avatarUrl, width: 40.w, height: 40.w, fit: BoxFit.cover, - errorBuilder: (context, error, stackTrace) { - return Image.asset( - Assets.imagesUserAvatar, - width: 40.w, - height: 40.w, - fit: BoxFit.cover, - ); - }, + placeholder: (context, url) => Image.asset( + Assets.imagesUserAvatar, + width: 40.w, + height: 40.w, + fit: BoxFit.cover, + ), + errorWidget: (context, url, error) => Image.asset( + Assets.imagesUserAvatar, + width: 40.w, + height: 40.w, + fit: BoxFit.cover, + ), ) : Image.asset( Assets.imagesUserAvatar, diff --git a/lib/widget/message/image_item.dart b/lib/widget/message/image_item.dart index 711187e..f29ffd2 100644 --- a/lib/widget/message/image_item.dart +++ b/lib/widget/message/image_item.dart @@ -4,6 +4,7 @@ import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:get/get.dart'; import 'package:im_flutter_sdk/im_flutter_sdk.dart'; import 'package:flutter_smart_dialog/flutter_smart_dialog.dart'; +import 'package:cached_network_image/cached_network_image.dart'; import 'package:dating_touchme_app/generated/assets.dart'; import 'package:dating_touchme_app/pages/message/image_viewer_page.dart'; import 'package:dating_touchme_app/controller/global.dart'; @@ -645,19 +646,23 @@ class _ImageItemState extends State { return ClipOval( child: avatarUrl != null && avatarUrl.isNotEmpty - ? Image.network( - avatarUrl, + ? CachedNetworkImage( + imageUrl: avatarUrl, width: 40.w, height: 40.w, fit: BoxFit.cover, - errorBuilder: (context, error, stackTrace) { - return Image.asset( - Assets.imagesUserAvatar, - width: 40.w, - height: 40.w, - fit: BoxFit.cover, - ); - }, + placeholder: (context, url) => Image.asset( + Assets.imagesUserAvatar, + width: 40.w, + height: 40.w, + fit: BoxFit.cover, + ), + errorWidget: (context, url, error) => Image.asset( + Assets.imagesUserAvatar, + width: 40.w, + height: 40.w, + fit: BoxFit.cover, + ), ) : Image.asset( Assets.imagesUserAvatar, diff --git a/lib/widget/message/room_item.dart b/lib/widget/message/room_item.dart index 5cdd576..b38c693 100644 --- a/lib/widget/message/room_item.dart +++ b/lib/widget/message/room_item.dart @@ -349,19 +349,23 @@ class RoomItem extends StatelessWidget { return ClipOval( child: avatarUrl != null && avatarUrl.isNotEmpty - ? Image.network( - avatarUrl, + ? CachedNetworkImage( + imageUrl: avatarUrl, width: 40.w, height: 40.w, fit: BoxFit.cover, - errorBuilder: (context, error, stackTrace) { - return Image.asset( - Assets.imagesUserAvatar, - width: 40.w, - height: 40.w, - fit: BoxFit.cover, - ); - }, + placeholder: (context, url) => Image.asset( + Assets.imagesUserAvatar, + width: 40.w, + height: 40.w, + fit: BoxFit.cover, + ), + errorWidget: (context, url, error) => Image.asset( + Assets.imagesUserAvatar, + width: 40.w, + height: 40.w, + fit: BoxFit.cover, + ), ) : Image.asset( Assets.imagesUserAvatar, diff --git a/lib/widget/message/text_item.dart b/lib/widget/message/text_item.dart index 20058a8..7574b51 100644 --- a/lib/widget/message/text_item.dart +++ b/lib/widget/message/text_item.dart @@ -2,6 +2,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:im_flutter_sdk/im_flutter_sdk.dart'; import 'package:get/get.dart'; +import 'package:cached_network_image/cached_network_image.dart'; import '../../../generated/assets.dart'; import '../../../controller/global.dart'; @@ -175,19 +176,23 @@ class TextItem extends StatelessWidget { return ClipOval( child: avatarUrl != null && avatarUrl.isNotEmpty - ? Image.network( - avatarUrl, + ? CachedNetworkImage( + imageUrl: avatarUrl, width: 40.w, height: 40.w, fit: BoxFit.cover, - errorBuilder: (context, error, stackTrace) { - return Image.asset( - Assets.imagesUserAvatar, - width: 40.w, - height: 40.w, - fit: BoxFit.cover, - ); - }, + placeholder: (context, url) => Image.asset( + Assets.imagesUserAvatar, + width: 40.w, + height: 40.w, + fit: BoxFit.cover, + ), + errorWidget: (context, url, error) => Image.asset( + Assets.imagesUserAvatar, + width: 40.w, + height: 40.w, + fit: BoxFit.cover, + ), ) : Image.asset( Assets.imagesUserAvatar, diff --git a/lib/widget/message/video_item.dart b/lib/widget/message/video_item.dart index 3c975ad..ea3599e 100644 --- a/lib/widget/message/video_item.dart +++ b/lib/widget/message/video_item.dart @@ -448,19 +448,23 @@ class _VideoItemState extends State { return ClipOval( child: avatarUrl != null && avatarUrl.isNotEmpty - ? Image.network( - avatarUrl, + ? CachedNetworkImage( + imageUrl: avatarUrl, width: 40.w, height: 40.w, fit: BoxFit.cover, - errorBuilder: (context, error, stackTrace) { - return Image.asset( - Assets.imagesUserAvatar, - width: 40.w, - height: 40.w, - fit: BoxFit.cover, - ); - }, + placeholder: (context, url) => Image.asset( + Assets.imagesUserAvatar, + width: 40.w, + height: 40.w, + fit: BoxFit.cover, + ), + errorWidget: (context, url, error) => Image.asset( + Assets.imagesUserAvatar, + width: 40.w, + height: 40.w, + fit: BoxFit.cover, + ), ) : Image.asset( Assets.imagesUserAvatar, diff --git a/lib/widget/message/voice_item.dart b/lib/widget/message/voice_item.dart index 09a1607..66ea566 100644 --- a/lib/widget/message/voice_item.dart +++ b/lib/widget/message/voice_item.dart @@ -7,6 +7,7 @@ import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:flutter_smart_dialog/flutter_smart_dialog.dart'; import 'package:get/get.dart'; import 'package:im_flutter_sdk/im_flutter_sdk.dart'; +import 'package:cached_network_image/cached_network_image.dart'; import '../../../generated/assets.dart'; import '../../../controller/message/voice_player_manager.dart'; @@ -493,19 +494,23 @@ class _VoiceItemState extends State with TickerProviderStateMixin { return ClipOval( child: avatarUrl != null && avatarUrl.isNotEmpty - ? Image.network( - avatarUrl, + ? CachedNetworkImage( + imageUrl: avatarUrl, width: 40.w, height: 40.w, fit: BoxFit.cover, - errorBuilder: (context, error, stackTrace) { - return Image.asset( - Assets.imagesUserAvatar, - width: 40.w, - height: 40.w, - fit: BoxFit.cover, - ); - }, + placeholder: (context, url) => Image.asset( + Assets.imagesUserAvatar, + width: 40.w, + height: 40.w, + fit: BoxFit.cover, + ), + errorWidget: (context, url, error) => Image.asset( + Assets.imagesUserAvatar, + width: 40.w, + height: 40.w, + fit: BoxFit.cover, + ), ) : Image.asset( Assets.imagesUserAvatar,