Flutter高仿微信-第32篇-单聊-语音

news2025/7/31 21:28:06

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);

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/35128.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

数据治理中最常听到的名词有哪些?

开门见山,我们先来说说何为“数据治理” 数据治理就是实现数据价值的过程。通俗的理解就是让企业的数据从不可控、不可用、不好用到可控、方便易用且对业务有极大帮助的过程。 这个过程怎么实现?通过采集、传输、储存等一系列标准化流程将原本零散的数…

【网络安全】文件上传之安全狗bypass

作者名:Demo不是emo 主页面链接:主页传送门创作初心:舞台再大,你不上台,永远是观众,没人会关心你努不努力,摔的痛不痛,他们只会看你最后站在什么位置,然后羡慕或鄙夷座右…

极光推送SDK引起的内存泄露排查

发现问题 发现推送服务的老年代不断增长,部分内存无法回收 内存泄露堆栈分析 通过运维平台ark,执行了jmap进行heaphump,使用mat工具分析,发现可能存在内存泄露 发现有大量的SocksSocketImpl对象被Finalizer引用 看SocksSocke…

SolidWorks二次开发 API-SOLIDWORKS Simulation分析参数修改

今天我们来讲个小例子。 是关于SOLIDWORKS Simulation的。 先说明一点,这东西我也不熟。有问题别问我 首先,我做了一个很难的分析,条件也是很复杂,具体操作我就不说了,分析结果如下: 当然这个图和我们今天要做的事情…

【台前调度】使用指南:如何打开和关闭iPadOS 16台前调度

【台前调度】可以说是iPadOS 16系统最实用的功能之一。它拥有崭新的多任务处理能力,能自动管理App和视窗,使多个任务窗口能够快速又简单地切换。 但是不少小伙伴更新iPadOS 16后还不知道怎么使用台前调度功能。如何开启使用和关闭iPadOS台前调度&#xf…

[附源码]SSM计算机毕业设计旅游管理系统JAVA

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

苹果手机之间怎么传音乐,怎么把音乐传到苹果手机上

很多人喜欢在自己的苹果手机中下载各种音乐,并且会将音乐传输到其他地方,苹果手机之间怎么传音乐?在此处获取将iphone里的音乐传输到电脑和iphone的解决方案。 一、iPhone如何传输音乐到电脑? 方法1:通过iTunes将iPho…

黑马瑞吉外卖之购物车功能开发(添加购物车和购物车数据展示)

黑马瑞吉外卖之购物车功能前端界面分析后台购物车功能逻辑实现前端界面分析 当我们点击选择规格的时候,数据参数item会传入按钮绑定的方法中 我们点击到这个按钮的时候,那么就会绑定到这个方法。这个方法会将数据给这个窗体中的数据项赋值。这个diaglo…

【linux】【platform[1]】简述device和driver几种匹配方式

文章目录0.env10. 简述20. 测试源码1. driver2. device2.1 方式一:DTS2.2 方式二:ACPI2.3 方式三:id table2.4 方式四:NAME3. 测试log0.env ARM 32bit linux4.4.6010. 简述 主要讲述了几种device和driver匹配的方式以及demo框架文…

82055-94-5|N3-PEG-N3|Azide-PEG-Azide|叠氮PEG叠氮可修饰蛋白质

可用来修饰蛋白质、多肽以及其他材料的叠氮-PEG-叠氮,其英文名为N3-PEG-N3或Azide-PEG-Azide,它所属分类为Azide PEG。 该peg试剂的分子量均可定制,有:叠氮-PEG-叠氮 2000、叠氮peg叠氮 1000、叠氮-聚乙二醇-叠氮 5000、N3-PEG-N…

天宇优配|国产海上风电装备大突破,行业复合增速将超3

在全球加紧应对气候变化以及能源供应严重的布景下,海优势电工业面对历史性开展机会。 全球单机容量最劲风电机组下线 据央视新闻,近日,我国自主研制的16兆瓦海优势电机组在福建三峡海优势电世界工业园下线。单机容量16兆瓦海优势电机组&…

MCE 抗乳腺癌化合物库上线丨靶向乳腺癌知多少?

乳腺癌是全世界女性最常见的恶性肿瘤,世界卫生组织 (WHO) 数据显示,全球每年大约有 210 万女性受乳腺癌影响,乳腺癌死亡率在女性肿瘤中居于首位。 认识乳腺癌 ■ 什么是乳腺癌? 乳腺癌 (Breast cancer) 是一种具有多种亚型的异质…

PG::Ha-natraj

nmap -Pn -p- -T4 --min-rate1000 192.168.134.80 nmap -Pn -p 22,80 -sCV 192.168.134.80 查看80端口的页面 未发现可利用的信息,对路径进行爆破 在/console目录下发现file.php 测试发现有本地文件包含 未发现别的利用方式,结合之前做过的靶机&am…

JAVA多线程2_Lock

文章目录一、ReentrantLock类1.使用ReentrantLock2.使用ReentrantLock实现多对多3.公平锁与非公平锁4.ReentrantLock类其他方法的使用二、ReentrantReadWriteLock类1.读读共享2.写写互斥3.读写互斥4.写读互斥总结一、ReentrantLock类 1.使用ReentrantLock 创建reentrantlock.s…

【计算机毕业设计】36.网易购商城购物平台源码

一、系统截图(需要演示视频可以私聊 摘 要 本毕业设计的内容是设计并且实现一个基于JSP技术的网易购购物平台。它是在Windows下,以MYSQL为数据库开发平台,Tomcat网络信息服务作为应用服务器。网易购购物平台的功能已基本实现,主…

sqli-labs/Less-62

欢迎界面提示我们一共由130次机会 而且还是以id作为注入点 每次重置都会随机分配表名、字段名、表格数据 首先判断注入类型 输入id1 and 12 回显如下 说明不属于数字型 接着输入1 回显如下 没有回显 说明注入点带有单引号 佐证一下吧 输入1-- 回显如下 说明不是纯粹的单引号…

【Redis技术探索】「高可用架构模式」哨兵(sentinel)模式实现主从故障互切换模式详解

哨兵(sentinel)模式实现主从故障互切换模式详解Redis的多种模式Redis单机模式Redis单机模式的优点Redis单机模式的缺点Redis主从复制旧版本配置新版本配置查看主节点信息主从模式的优点主从复制的弊端Redis哨兵模式分析哨兵结构组成哨兵模式的主从切换Re…

ROS-TCP-Connector and ROS-TCP-Endpoint

Unity官方提供了和ROS交互的接口:ROS-TCP-Connector and ROS-TCP-Endpoint。有了这两个Unity就能够更好的和真实机器人做交互。两个接口的实现基于ROS#、ros_bridge,所以基本上以后用这个就可以了。 源码如下:   ROS-TCP-Endpoint&#xff…

学生党蓝牙耳机怎么选?四款性价比高的蓝牙耳机推荐

随着时代的发展,人们越来越追求事物的使用体验感。便捷的蓝牙耳机成为更多人的选择,对于学生党来说,蓝牙耳机的重要性不言而喻。接下来,我来推荐几款适合学生党的蓝牙耳机。 1、南卡小音舱蓝牙耳机 综合得分:96分(满…

骨传导耳机伤耳朵吗?带你一分钟了解骨传导耳机

最近听到最多的一句话就是:骨传导耳机伤耳朵吗?骨传导耳机不会伤害耳朵,反而更能保护耳朵。骨传导耳机是不入耳的,既不伤耳,还能保护耳部。骨传导耳机我用过很多款,知道有哪些骨传导耳机是比较好的&#xf…