Browse Source

优化

dev-2.0
王子贤 3 weeks ago
parent
commit
7073a68b33
4 changed files with 278 additions and 3 deletions
  1. BIN
      assets/images/live_error_icon.png
  2. 245
      lib/controller/discover/room_controller.dart
  3. 1
      lib/generated/assets.dart
  4. 35
      lib/widget/live/draggable_overlay_widget.dart

BIN
assets/images/live_error_icon.png

Before After
Width: 406  |  Height: 406  |  Size: 88 KiB

245
lib/controller/discover/room_controller.dart

@ -1,8 +1,10 @@
import 'dart:async';
import 'dart:convert';
import 'package:agora_rtc_engine/agora_rtc_engine.dart';
import 'package:dating_touchme_app/config/env_config.dart';
import 'package:dating_touchme_app/controller/global.dart';
import 'package:dating_touchme_app/controller/message/conversation_controller.dart';
import 'package:dating_touchme_app/controller/overlay_controller.dart';
import 'package:dating_touchme_app/extension/ex_widget.dart';
import 'package:dating_touchme_app/generated/assets.dart';
@ -17,6 +19,7 @@ import 'package:dating_touchme_app/model/rtc/rtc_channel_data.dart';
import 'package:dating_touchme_app/model/rtc/rtc_channel_detail.dart';
import 'package:dating_touchme_app/network/network_service.dart';
import 'package:dating_touchme_app/pages/mine/edit_info_page.dart';
import 'package:dating_touchme_app/pages/mine/login_page.dart';
import 'package:dating_touchme_app/pages/setting/match_league_page.dart';
import 'package:dating_touchme_app/rtc/rtc_manager.dart';
import 'package:dating_touchme_app/rtc/rtm_manager.dart';
@ -479,6 +482,47 @@ class RoomController extends GetxController with WidgetsBindingObserver {
final sseClient = SSEClient();
logout() async {
// 退
if (Get.isRegistered<RoomController>()) {
try {
final roomController = Get.find<RoomController>();
await roomController.leaveChannel();
} catch (e) {
print('退出直播间失败: $e');
}
}
//
if (Get.isRegistered<OverlayController>()) {
try {
final overlayController = Get.find<OverlayController>();
overlayController.hide(); //
overlayController.hideVideoCall(); //
} catch (e) {
print('取消小窗口失败: $e');
}
}
// 退 IM
if(IMManager.instance.isInitialized){
await IMManager.instance.logout();
}
//
if (Get.isRegistered<ConversationController>()) {
final conversationController = Get.find<ConversationController>();
conversationController.clearConversations();
}
// App清除本地存储
// storage.erase();
GetStorage().remove('userId');
GetStorage().remove('token');
// storage.write('hasAgreedUserAgreement', true);
//
GlobalData().logout();
}
final count = 3.obs;
/// RTC
Future<void> createRtcChannel() async {
if (isLive.value) {
@ -524,7 +568,206 @@ class RoomController extends GetxController with WidgetsBindingObserver {
final Stream<SSEResponse> stream = sseClient.connect("connectionId", request);
stream.listen(
(SSEResponse response) {
print("Received event: ${response.event}, data: ${response.data}");
print("sseData: ${response.rawResponse}");
String raw = response.rawResponse;
if (raw.startsWith("data:")) {
String result = raw.substring(5);
print(result);
Map<String, dynamic> data = jsonDecode(result);
print(data["data"]["illegalLabel"]);
if(data["data"]["illegalHandle"] == 1){
RTCManager.instance.publishAudio();
// overlay
if(!isDialogShowing.value){
SmartDialog.dismiss();
setDialogDismiss(true);
SmartDialog.show(
onDismiss: (){
setDialogDismiss(false);
},
builder: (context) {
return ClipRRect(
borderRadius: BorderRadius.all(Radius.circular(16.w)),
child: Material(
color: Colors.white,
child: Container(
width: 311.w,
height: 275.w,
padding: EdgeInsets.only(
top: 25.w,
right: 25.w,
left: 25.w
),
child: Column(
children: [
Image.asset(
Assets.imagesLiveErrorIcon,
width: 102.w,
height: 102.w,
),
SizedBox(height: 5.w,),
Text(
"系统提醒",
textAlign: TextAlign.center,
style: TextStyle(
fontSize: 18.w,
fontWeight: FontWeight.w700
),
),
SizedBox(height: 7.w,),
Text(
"你的行为涉嫌违反平台社区规范,请注意规范言行。多次违规将会受到限制功能、封禁账号等处罚,请文明交友,理性互动。",
textAlign: TextAlign.center,
style: TextStyle(
fontSize: 14.w
),
),
SizedBox(height: 14.w,),
Container(
width: 188.w,
height: 40.w,
decoration: BoxDecoration(
borderRadius: BorderRadius.all(Radius.circular(12.w)),
color: const Color.fromRGBO(117, 98, 249, 1)
),
child: Center(
child: Text(
"确认",
style: TextStyle(
fontSize: 14.w,
color: Colors.white
),
),
),
).onTap(() {
// overlay
SmartDialog.dismiss();
setDialogDismiss(false);
})
],
),
),
),
);
},
);
}
} else if(data["data"]["illegalHandle"] == 2){
SmartDialog.dismiss();
setDialogDismiss(true);
Future.delayed(Duration(seconds: 3), () async {
SmartDialog.dismiss();
final isNotBroadcaster = currentRole != CurrentRole.broadcaster;
if (isNotBroadcaster) {
await leaveChannel();
// LiveChatMessageService
LiveChatMessageService.instance.handleEndLiveMessage();
logout();
Get.offAll(() => LoginPage());
} else {
if(isClose.value) return;
isClose.value = true;
await leaveChannel();
SmartDialog.dismiss();
if (Get.isRegistered<RoomController>()) {
final roomController = Get.find<RoomController>();
roomController.chatMessages.clear();
}
// pop Get.back()
final OverlayController _overlayController = Get.find<OverlayController>();
//
Future.delayed(const Duration(milliseconds: 200), () {
_overlayController.hide();
isClose.value = false;
});
logout();
Get.offAll(() => LoginPage());
}
});
Timer? _timer;
_timer = Timer.periodic(Duration(seconds: 1), (timer) {
count.value --;
update();
// 👇
if (count.value == 0) {
print("满足条件,停止执行");
timer.cancel(); //
}
});
SmartDialog.show(
onDismiss: (){
setDialogDismiss(false);
_timer?.cancel();
},
builder: (context) {
return ClipRRect(
borderRadius: BorderRadius.all(Radius.circular(16.w)),
child: Material(
color: Colors.white,
child: Container(
width: 311.w,
height: 275.w,
padding: EdgeInsets.only(
top: 25.w,
right: 25.w,
left: 25.w
),
child: Column(
children: [
Image.asset(
Assets.imagesLiveErrorIcon,
width: 102.w,
height: 102.w,
),
SizedBox(height: 5.w,),
Text(
"账户封禁",
textAlign: TextAlign.center,
style: TextStyle(
fontSize: 18.w,
fontWeight: FontWeight.w700
),
),
SizedBox(height: 7.w,),
Text(
"你的账号因 涉嫌违规,已被封禁。",
textAlign: TextAlign.center,
style: TextStyle(
fontSize: 14.w
),
),
SizedBox(height: 14.w,),
Obx((){
return Text(
"${count.value}秒后返回到登录界面",
textAlign: TextAlign.center,
style: TextStyle(
fontSize: 14.w
),
);
}),
],
),
),
),
);
},
);
}
}
},
onError: (error) => print("SSE Error: $error"),
onDone: () => print("SSE Connection Closed"),

1
lib/generated/assets.dart

@ -142,6 +142,7 @@ class Assets {
static const String imagesLikeActive = 'assets/images/like_active.png';
static const String imagesLikeIcon = 'assets/images/like_icon.png';
static const String imagesLimitTime = 'assets/images/limit_time.png';
static const String imagesLiveErrorIcon = 'assets/images/live_error_icon.png';
static const String imagesLiveIcon = 'assets/images/live_icon.png';
static const String imagesLocationIcon = 'assets/images/location_icon.png';
static const String imagesLoginBg = 'assets/images/login_bg.png';

35
lib/widget/live/draggable_overlay_widget.dart

@ -3,8 +3,11 @@ import 'package:dating_touchme_app/controller/discover/room_controller.dart';
import 'package:dating_touchme_app/controller/overlay_controller.dart';
import 'package:dating_touchme_app/extension/ex_widget.dart';
import 'package:dating_touchme_app/pages/discover/live_room_page.dart';
import 'package:dating_touchme_app/pages/discover/settlement_page.dart';
import 'package:dating_touchme_app/service/live_chat_message_service.dart';
import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:flutter_smart_dialog/flutter_smart_dialog.dart';
import 'package:get/get.dart';
import 'package:dating_touchme_app/rtc/rtc_manager.dart';
@ -172,8 +175,36 @@ class _DraggableOverlayWidgetState extends State<DraggableOverlayWidget> {
right: 2.w,
child: GestureDetector(
onTap: () async {
await _roomController.leaveChannel();
widget.onClose?.call();
try {
final isNotBroadcaster = _roomController.currentRole != CurrentRole.broadcaster;
if (isNotBroadcaster) {
await _roomController.leaveChannel();
// LiveChatMessageService
LiveChatMessageService.instance.handleEndLiveMessage();
} else {
if(_roomController.isClose.value) return;
_roomController.isClose.value = true;
widget.onClose?.call();
await _roomController.leaveChannel();
await _roomController.getLiveData();
await _roomController.getLiveIncome();
SmartDialog.dismiss();
if (Get.isRegistered<RoomController>()) {
final roomController = Get.find<RoomController>();
roomController.chatMessages.clear();
}
// pop Get.back()
Get.to(() => SettlementPage());
//
Future.delayed(const Duration(milliseconds: 200), () {
_overlayController.hide();
_roomController.isClose.value = false;
});
}
} catch (e){
_roomController.isClose.value = false;
}
},
child: Container(
width: 20.w,

Loading…
Cancel
Save