yumi-flutter/lib/ui_kit/widgets/room/exit_min_room_page.dart
2026-06-15 16:21:05 +08:00

122 lines
4.5 KiB
Dart

import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:yumi/app_localizations.dart';
import 'package:yumi/ui_kit/components/sc_debounce_widget.dart';
import 'package:yumi/ui_kit/components/text/sc_text.dart';
import 'package:provider/provider.dart';
import 'package:yumi/app/routes/sc_fluro_navigator.dart';
import 'package:yumi/modules/room/voice_room_route.dart';
import 'package:yumi/services/audio/rtm_manager.dart';
import 'package:yumi/services/gift/gift_animation_manager.dart';
import 'package:yumi/services/audio/rtc_manager.dart';
import 'package:yumi/shared/data_sources/sources/local/floating_screen_manager.dart';
import 'package:yumi/shared/tools/sc_gift_vap_svga_manager.dart';
import 'package:yumi/shared/tools/sc_room_effect_scheduler.dart';
import 'package:yumi/ui_kit/widgets/room/anim/room_entrance_widget.dart';
import '../../components/sc_float_ichart.dart';
class ExitMinRoomPage extends StatefulWidget {
final bool isFz;
final String roomId;
const ExitMinRoomPage(this.isFz, this.roomId, {super.key});
@override
State<ExitMinRoomPage> createState() => _ExitMinRoomPageState();
}
class _ExitMinRoomPageState extends State<ExitMinRoomPage> {
@override
Widget build(BuildContext context) {
return Stack(
alignment: Alignment.center,
children: [
SCDebounceWidget(
child: Container(color: Colors.transparent),
onTap: () {
Navigator.of(context).pop();
},
),
Column(
spacing: 55.w,
mainAxisAlignment: MainAxisAlignment.center,
children: [
SCDebounceWidget(
child: Column(
children: [
Image.asset(
"sc_images/room/sc_icon_min_room.png",
width: 48.w,
height: 48.w,
),
SizedBox(height: 8.w),
text(
SCAppLocalizations.of(context)!.mInimize,
fontSize: 15.sp,
textColor: Colors.white,
fontWeight: FontWeight.w500,
),
],
),
onTap: () async {
final rtcProvider = context.read<RtcProvider>();
if (rtcProvider.roomStartupStatus ==
RoomStartupStatus.loading ||
rtcProvider.roomStartupStatus == RoomStartupStatus.failed) {
SCNavigatorUtils.goBack(context);
await rtcProvider.exitCurrentVoiceRoomSession(false);
return;
}
final giftAnimationManager =
context.read<GiftAnimationManager>();
final rtmProvider = context.read<RtmProvider>();
final currentRoomId =
rtcProvider.currenRoom?.roomProfile?.roomProfile?.id
?.trim() ??
'';
rtcProvider.setVoiceRoomRouteVisible(false);
rtcProvider.setRoomVisualEffectsEnabled(false);
rtmProvider.msgFloatingGiftListener = null;
rtmProvider.msgLuckyGiftRewardTickerListener = null;
RoomEntranceHelper.clearQueue();
OverlayManager().removeRoom(roomId: currentRoomId);
SCRoomEffectScheduler().clearDeferredTasks(
reason: 'room_minimize',
);
SCGiftVapSvgaManager().stopPlayback();
giftAnimationManager.cleanupAnimationResources();
SCFloatIchart().show();
VoiceRoomRoute.popVoiceRoomToPrevious(context);
},
),
SCDebounceWidget(
child: Column(
children: [
Image.asset(
"sc_images/room/sc_icon_exit_room.png",
width: 48.w,
height: 48.w,
),
SizedBox(height: 8.w),
text(
SCAppLocalizations.of(context)!.exit,
fontSize: 15.sp,
textColor: Colors.white,
fontWeight: FontWeight.w500,
),
],
),
onTap: () {
final rtcProvider = context.read<RtcProvider>();
SCNavigatorUtils.goBack(context);
rtcProvider.exitCurrentVoiceRoomSession(false);
},
),
],
),
],
);
}
}