From 48e51dbecee5ef975014088f3350e24045d30ce8 Mon Sep 17 00:00:00 2001 From: Jolie <412895109@qq.com> Date: Fri, 5 Dec 2025 20:31:23 +0800 Subject: [PATCH] =?UTF-8?q?fix(live):=20=E8=B0=83=E6=95=B4=E7=9B=B4?= =?UTF-8?q?=E6=92=AD=E9=80=80=E5=87=BA=E6=B5=81=E7=A8=8B=E5=92=8CRTC=20tok?= =?UTF-8?q?en=E7=BB=AD=E6=9C=9F=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 修改直播退出时overlay隐藏与页面返回的顺序 - 新增RTC token即将过期时的自动续期处理 - 引入agora_token_generator库以支持token生成 - 在onTokenPrivilegeWillExpire回调中实现token更新机制 --- lib/rtc/rtc_manager.dart | 11 +++++++++++ lib/widget/live/live_room_user_header.dart | 7 ++----- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/lib/rtc/rtc_manager.dart b/lib/rtc/rtc_manager.dart index fc954bc..787f1ef 100644 --- a/lib/rtc/rtc_manager.dart +++ b/lib/rtc/rtc_manager.dart @@ -1,6 +1,7 @@ import 'dart:convert'; import 'package:agora_rtc_engine/agora_rtc_engine.dart'; +import 'package:agora_token_generator/agora_token_generator.dart'; import 'package:dating_touchme_app/rtc/rtm_manager.dart'; import 'package:flutter/foundation.dart'; import 'package:get/get.dart'; @@ -260,6 +261,16 @@ class RTCManager { onConnectionLost!(connection); } }, + onTokenPrivilegeWillExpire: (RtcConnection connection, String token) { + String rtcToken = RtcTokenBuilder.buildTokenWithUid( + appId: '4c2ea9dcb4c5440593a418df0fdd512d', + appCertificate: '16f34b45181a4fae8acdb1a28762fcfa', + channelName: _currentChannelId ?? '', + uid: _currentUid ?? 0, + tokenExpireSeconds: 3600, // 2 hours + ); + _engine?.renewToken(rtcToken); + }, onError: (ErrorCodeType err, String msg) { print('RTC Engine 错误:$err,消息:$msg'); if (onError != null) { diff --git a/lib/widget/live/live_room_user_header.dart b/lib/widget/live/live_room_user_header.dart index 348c611..e9fb077 100644 --- a/lib/widget/live/live_room_user_header.dart +++ b/lib/widget/live/live_room_user_header.dart @@ -138,14 +138,11 @@ class LiveRoomUserHeader extends StatelessWidget { if (hasGuests) SizedBox(height: 15.w), GestureDetector( onTap: () async { - // 关闭弹窗 SmartDialog.dismiss(); - // 隐藏 overlay - overlayController.hide(); - // 返回上一页 Get.back(); - // 调用结束直播方法 + overlayController.hide(); await roomController.leaveChannel(); + // 隐藏 overlay }, child: Row( mainAxisAlignment: MainAxisAlignment.center,