onBubbleTap method

  1. @override
void onBubbleTap(
  1. BuildContext context
)
override

Implementation

@override
void onBubbleTap(BuildContext context) {
  RCIMIWMediaMessage sightMessage = message as RCIMIWMediaMessage;
  final progressKey = _getProgressKey(sightMessage.messageId);
  final provider = context.read<RCKDownloadProgressProvider>();

  if (sightMessage.local == null || sightMessage.local!.isEmpty) {
    double progress = provider.getProgress(progressKey).value;
    if (progress > 0 && progress < 1) {
      context.read<RCKChatProvider>().cancelDownloadMediaMessage(
        sightMessage,
        downloadCancel: (message) {
          provider.reset(progressKey); // 下载取消,重置进度
        },
      );
    } else {
      context.read<RCKChatProvider>().downloadMediaMessage(
        sightMessage,
        downloaded: (code, message) {
          provider.reset(progressKey);
          // 下载完成后打开播放器
          if (code == 0) {
            sightMessage.local = message?.local ?? '';
            context.read<RCKAudioPlayerProvider>().stopVoiceMessage();
            final chatProvider = context.read<RCKChatProvider>();
            chatProvider.saveScrollOffset();
            Navigator.pushNamed(context, '/video_player_page', arguments: {
              'currentIndex': 0,
              'videos': [sightMessage],
            }).then((value) {
              chatProvider.jumpToScrollOffset();
            });
          }
        },
        downloading: (message, progress) {
          provider.updateProgress(
              progressKey, (progress ?? 0) / 100); // 转换进度为0-1
        },
      );
    }
  } else {
    context.read<RCKAudioPlayerProvider>().stopVoiceMessage();
    context.read<RCKVoiceRecordProvider>().cancelRecord();
    final chatProvider = context.read<RCKChatProvider>();
    chatProvider.saveScrollOffset();
    Navigator.pushNamed(context, '/video_player_page', arguments: {
      'currentIndex': 0,
      'videos': [sightMessage],
    }).then((value) {
      chatProvider.jumpToScrollOffset();
    });
  }
}