Flutter高仿微信系列共59篇,从Flutter客户端、Kotlin客户端、Web服务器、数据库表结构、Xmpp即时通讯服务器、视频通话服务器、腾讯云服务器全面讲解。
详情请查看
效果图:

详情请参考 Flutter高仿微信-第29篇-单聊 , 这里只是提取语音聊天实现的部分代码。
实现代码:
//我的语言
Widget meVoiceWidget(){return InkWell(onTap: () {widget.clickVoiceCallback(true);setState(() {widget.chatBean.isPlayVoice = true;});//点击语音AudioPlayer.getInstance().playLocal(widget.chatBean.voiceLocal??"", callback: (data){//录音回调setState(() {widget.chatBean.isPlayVoice = false;});});},child : Container(width: 120,height: 40,padding: EdgeInsets.symmetric(vertical: 4.0, horizontal: 2.0),decoration: BoxDecoration(borderRadius: BorderRadius.all(Radius.circular(1.0),),color: Color(0xFF9EEA6A),),child: Row(crossAxisAlignment: CrossAxisAlignment.center,mainAxisAlignment: MainAxisAlignment.center,children: [Text("${widget.chatBean.second}''"),SizedBox(width: 4,),widget.chatBean.isPlayVoice?Image.asset("assets/chat/wn_chat_me_animator.gif", height: 24,):Image.asset("assets/chat/wn_chat_me_volume_3.png", height: 24,),],),));
}
//朋友的语音
Widget toVoiceWidget(){return InkWell(onTap: () {setState(() {widget.chatBean.isPlayVoice = true;});LogUtils.d("点击语音");AudioPlayer.getInstance().playLocal(widget.chatBean.voiceLocal??"", callback: (data){LogUtils.d("录音回调:${data}");setState(() {widget.chatBean.isPlayVoice = false;});});},child : Container(width: 120,height: 40,padding: EdgeInsets.symmetric(vertical: 4.0, horizontal: 2.0),decoration: BoxDecoration(borderRadius: BorderRadius.all(Radius.circular(5.0),),color: Color(0xFFEDEDED)),child: Row(crossAxisAlignment: CrossAxisAlignment.center,mainAxisAlignment: MainAxisAlignment.center,children: [widget.chatBean.isPlayVoice?Image.asset("assets/chat/wn_chat_other_animator.gif", height: 34,):Image.asset("assets/chat/wn_chat_other_volume_3.png", height: 34,),SizedBox(width: 4,),Text("${widget.chatBean.second}''"),],),));
}
//发送多媒体(图片、语音、小视频)
void _sendMedia(int type, String mediaURL, {int mediaSecond = 0, String messageId = ""}) async {bool isNetwork = await CommonNetwork.isNetwork();if(!isNetwork) {return;}bool deleteContacts = await isDeleteContacts(widget.account, widget.toChatId);if(deleteContacts){return;}//上传文件ChatBean serverChatBean;String message = "";ChatSendBean chatSendBean = ChatSendBean();chatSendBean.contentType = type;chatSendBean.messageId = messageId;chatSendBean.addTime = WnDateUtils.getCurrentTime();if(type == CommonUtils.CHAT_CONTENT_TYPE_VOICE){//语音serverChatBean = await UploadUtils.getInstance().uploadChatVoice(widget.account, widget.toChatId, mediaURL);chatSendBean.content = serverChatBean.voice??"";chatSendBean.second = mediaSecond;} else {return ;}message = jsonEncode(chatSendBean);_sendMessage(message);
}
接收语音:
String serverVoicePath = CommonUtils.BASE_URL_UPLOAD + content;
String localVoicePath = await FileUtils.getBaseFile("${DateUtil.getNowDateMs()}.mp3");
//先下载语音
await DownloadUtils.getInstance().downloadFile(serverVoicePath, localVoicePath);
chatBean.voice = serverVoicePath;
chatBean.voiceLocal = localVoicePath;
chatBean.second = second;
//通知栏提示 NotificationUtils.getInstance().showNotification(chatBean); //插入本地数据库 ChatRepository.getInstance().insertChat(chatBean); //刷新页面 eventBus.emit(chatBean);
上一篇:古代诗词中关于槐花的诗句20分
下一篇:有哪些关于帮助别人的四字成语