onBubbleTap method
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();
});
}
}