feat:设置头像为默认圆形

This commit is contained in:
Zeew 2025-08-02 22:52:47 +08:00
parent 69154d528d
commit 4cf3be0670
2 changed files with 580 additions and 483 deletions

View File

@ -20,7 +20,9 @@ class Avatar extends TIMUIKitStatelessWidget {
final V2TimUserStatus? onlineStatus;
final int? type; // 1 c2c 2 group
final bool isShowBigWhenClick;
final TUISelfInfoViewModel selfInfoViewModel = serviceLocator<TUISelfInfoViewModel>();
final bool isCircle; //
final TUISelfInfoViewModel selfInfoViewModel =
serviceLocator<TUISelfInfoViewModel>();
Avatar(
{Key? key,
@ -30,6 +32,7 @@ class Avatar extends TIMUIKitStatelessWidget {
this.isShowBigWhenClick = false,
this.isFromLocalAsset = false,
this.borderRadius,
this.isCircle = true,
this.type = 1})
: super(key: key);
@ -37,18 +40,24 @@ class Avatar extends TIMUIKitStatelessWidget {
Widget defaultAvatar() {
if (type == 1) {
return Image.asset(
TencentUtils.checkString(selfInfoViewModel.globalConfig?.defaultAvatarAssetPath) ??
TencentUtils.checkString(
selfInfoViewModel.globalConfig?.defaultAvatarAssetPath) ??
'images/default_c2c_head.png',
fit: BoxFit.cover,
package:
selfInfoViewModel.globalConfig?.defaultAvatarAssetPath != null ? null : 'tencent_cloud_chat_uikit');
selfInfoViewModel.globalConfig?.defaultAvatarAssetPath != null
? null
: 'tencent_cloud_chat_uikit');
} else {
return Image.asset(
TencentUtils.checkString(selfInfoViewModel.globalConfig?.defaultAvatarAssetPath) ??
TencentUtils.checkString(
selfInfoViewModel.globalConfig?.defaultAvatarAssetPath) ??
'images/default_group_head.png',
fit: BoxFit.cover,
package:
selfInfoViewModel.globalConfig?.defaultAvatarAssetPath != null ? null : 'tencent_cloud_chat_uikit');
selfInfoViewModel.globalConfig?.defaultAvatarAssetPath != null
? null
: 'tencent_cloud_chat_uikit');
}
}
@ -76,19 +85,27 @@ class Avatar extends TIMUIKitStatelessWidget {
ImageProvider defaultAvatar() {
if (type == 1) {
return Image.asset(
TencentUtils.checkString(selfInfoViewModel.globalConfig?.defaultAvatarAssetPath) ??
TencentUtils.checkString(selfInfoViewModel
.globalConfig?.defaultAvatarAssetPath) ??
'images/default_c2c_head.png',
fit: BoxFit.cover,
package:
selfInfoViewModel.globalConfig?.defaultAvatarAssetPath != null ? null : 'tencent_cloud_chat_uikit')
selfInfoViewModel.globalConfig?.defaultAvatarAssetPath !=
null
? null
: 'tencent_cloud_chat_uikit')
.image;
} else {
return Image.asset(
TencentUtils.checkString(selfInfoViewModel.globalConfig?.defaultAvatarAssetPath) ??
TencentUtils.checkString(selfInfoViewModel
.globalConfig?.defaultAvatarAssetPath) ??
'images/default_group_head.png',
fit: BoxFit.cover,
package:
selfInfoViewModel.globalConfig?.defaultAvatarAssetPath != null ? null : 'tencent_cloud_chat_uikit')
selfInfoViewModel.globalConfig?.defaultAvatarAssetPath !=
null
? null
: 'tencent_cloud_chat_uikit')
.image;
}
}
@ -109,6 +126,16 @@ class Avatar extends TIMUIKitStatelessWidget {
Widget tuiBuild(BuildContext context, TUIKitBuildValue value) {
final TUITheme theme = value.theme;
// isCircle参数决定borderRadius
BorderRadius getAvatarBorderRadius() {
if (isCircle) {
return BorderRadius.circular(200); // 使
}
return borderRadius ??
selfInfoViewModel.globalConfig?.defaultAvatarBorderRadius ??
BorderRadius.circular(4.8);
}
return Stack(
fit: StackFit.expand,
clipBehavior: Clip.none,
@ -119,24 +146,22 @@ class Avatar extends TIMUIKitStatelessWidget {
Navigator.of(context).push(
PageRouteBuilder(
opaque: false, // set to false
pageBuilder: (_, __, ___) => ImageScreen(imageProvider: getImageProvider(), heroTag: faceUrl),
pageBuilder: (_, __, ___) => ImageScreen(
imageProvider: getImageProvider(), heroTag: faceUrl),
),
);
},
child: Hero(
tag: faceUrl,
child: ClipRRect(
borderRadius: borderRadius ??
selfInfoViewModel.globalConfig?.defaultAvatarBorderRadius ??
BorderRadius.circular(4.8),
borderRadius: getAvatarBorderRadius(),
child: getImageWidget(context, theme),
),
),
),
if (!isShowBigWhenClick)
ClipRRect(
borderRadius:
borderRadius ?? selfInfoViewModel.globalConfig?.defaultAvatarBorderRadius ?? BorderRadius.circular(4.8),
borderRadius: getAvatarBorderRadius(),
child: getImageWidget(context, theme),
),
if (onlineStatus?.statusType != null && onlineStatus?.statusType != 0)

File diff suppressed because it is too large Load Diff