buildMessageContent method
Implementation
@override
Widget buildMessageContent(BuildContext context, String? refName) {
RCIMIWSightMessage sightMessage = message as RCIMIWSightMessage;
final progressKey = _getProgressKey(sightMessage.messageId);
// 使用配置的视频样式
final sightConfig = config?.sightStyleConfig;
final maxWidth = sightConfig?.maxWidth ?? 100;
final maxHeight = sightConfig?.maxHeight ?? 180;
final playButtonSize = sightConfig?.playButtonSize ?? 40;
final playButtonColor = sightConfig?.playButtonColor ??
RCKThemeProvider().themeColor.bgAuxiliary1;
final sightDownloaded =
sightMessage.local != null && sightMessage.local!.isNotEmpty;
return StatefulBuilder(
builder: (context, setState) {
return Stack(
alignment: Alignment.center,
children: [
ClipRRect(
borderRadius: BorderRadius.circular(
config?.imageStyleConfig.borderRadius ?? 8.0),
child: Container(
constraints: BoxConstraints(
maxWidth: maxWidth,
maxHeight: maxHeight,
),
child: ImageUtil.getImageWidget(
"",
thumbnailBase64String: sightMessage.thumbnailBase64String,
fit: BoxFit.contain,
),
),
),
Consumer<RCKDownloadProgressProvider>(
builder: (context, provider, child) {
double progress = provider.getProgress(progressKey).value;
final isDownloading = progress > 0 && progress < 1;
final customPlayButtonIconPath =
sightConfig?.customPlayButtonIconPath ??
(sightDownloaded
? 'sight_play.png'
: isDownloading
? 'sight_downloading.png'
: 'sight_download.png');
return Stack(
alignment: AlignmentDirectional.center,
children: [
ImageUtil.getImageWidget(
customPlayButtonIconPath,
width: playButtonSize,
height: playButtonSize,
),
if (isDownloading)
SizedBox(
width: playButtonSize * 0.75,
height: playButtonSize * 0.75,
child: CircularProgressIndicator(
value: progress,
strokeWidth: 3,
color: playButtonColor,
),
)
],
);
}),
],
);
},
);
}