From 0ec1631eeee44a6167d75e31f0e150a90e755a75 Mon Sep 17 00:00:00 2001 From: Jolie <412895109@qq.com> Date: Mon, 29 Dec 2025 23:43:13 +0800 Subject: [PATCH] =?UTF-8?q?feat(call):=20=E6=94=AF=E6=8C=81=E8=AF=AD?= =?UTF-8?q?=E9=9F=B3=E9=80=9A=E8=AF=9D=E9=82=80=E8=AF=B7=E5=BC=B9=E6=A1=86?= =?UTF-8?q?=E6=98=BE=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 扩展通话类型支持,同时处理视频和语音通话 - 添加通话类型参数传递到邀请弹框组件 - 根据通话类型动态显示相应的邀请文案 - 优化通话页面中邀请文字的判断逻辑 --- lib/im/im_manager.dart | 2 +- lib/pages/message/video_call_page.dart | 5 +++-- lib/widget/message/video_call_invite_dialog.dart | 4 +++- 3 files changed, 7 insertions(+), 4 deletions(-) diff --git a/lib/im/im_manager.dart b/lib/im/im_manager.dart index 4798bbc..d248bb7 100644 --- a/lib/im/im_manager.dart +++ b/lib/im/im_manager.dart @@ -1453,7 +1453,7 @@ class IMManager { // 如果解析到通话信息,检查是否需要显示视频通话邀请弹框 if (callInfo != null && callType != null && callStatus != null) { // 只处理视频通话且状态为 missed 或 calling 的消息(新邀请) - if (callType == 'video' && (callStatus == 'missed' || callStatus == 'calling')) { + if ((callType == 'video' || callType == 'voice') && (callStatus == 'missed' || callStatus == 'calling')) { // 获取用户信息 Map? attributes; try { diff --git a/lib/pages/message/video_call_page.dart b/lib/pages/message/video_call_page.dart index 021a72e..89e8fd0 100644 --- a/lib/pages/message/video_call_page.dart +++ b/lib/pages/message/video_call_page.dart @@ -19,12 +19,14 @@ import '../../model/home/marriage_data.dart'; /// 视频通话页面 class VideoCallPage extends StatefulWidget { final String targetUserId; + final String? callType; final MarriageData? userData; final bool isInitiator; // 是否是发起方 const VideoCallPage({ super.key, required this.targetUserId, + this.callType, this.userData, this.isInitiator = true, }); @@ -401,8 +403,7 @@ class _VideoCallPageState extends State { Widget _buildCallDuration() { // 如果是被呼叫方且未接通,显示邀请文字 if (!widget.isInitiator && !_isCallConnected) { - final callSession = _callController.currentCall.value; - final isVideoCall = callSession != null && callSession.callType == CallType.video; + final isVideoCall = widget.callType == 'video'; final inviteText = isVideoCall ? '邀请你视频通话' : '邀请你语音通话'; return Positioned( diff --git a/lib/widget/message/video_call_invite_dialog.dart b/lib/widget/message/video_call_invite_dialog.dart index a83ecf1..9e80b34 100644 --- a/lib/widget/message/video_call_invite_dialog.dart +++ b/lib/widget/message/video_call_invite_dialog.dart @@ -7,6 +7,7 @@ import 'package:flutter_screenutil/flutter_screenutil.dart'; class VideoCallInviteDialog extends StatelessWidget { final String avatarUrl; final String nickName; + final String? callType; final VoidCallback? onTap; // 点击弹框主体区域(只跳转,不接通) final VoidCallback? onAccept; // 点击接通按钮(接通并跳转) final VoidCallback? onReject; // 点击挂断按钮(拒绝) @@ -15,6 +16,7 @@ class VideoCallInviteDialog extends StatelessWidget { super.key, required this.avatarUrl, required this.nickName, + this.callType, this.onTap, this.onAccept, this.onReject, @@ -93,7 +95,7 @@ class VideoCallInviteDialog extends StatelessWidget { SizedBox(height: 4.h), // 邀请文案 Text( - '邀请你视频通话', + '邀请你${callType == 'video' ? '视频' : '语音'}通话', style: TextStyle( fontSize: 13.sp, color: Colors.white.withOpacity(0.8),