buildMessageContent method

  1. @override
Widget buildMessageContent(
  1. BuildContext context,
  2. String? refName
)
override

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,
                    ),
                  )
              ],
            );
          }),
        ],
      );
    },
  );
}