yumi-flutter/lib/ui_kit/widgets/room/exit_min_room_page.dart
2026-04-30 10:11:30 +08:00

124 lines
4.5 KiB
Dart

import 'dart:async';
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_routes.dart';
import 'package:yumi/app/routes/sc_fluro_navigator.dart';
import 'package:yumi/services/audio/rtm_manager.dart';
import 'package:yumi/services/gift/gift_animation_manager.dart';
import 'package:yumi/services/music/room_music_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>();
rtcProvider.setRoomVisualEffectsEnabled(false);
rtmProvider.msgFloatingGiftListener = null;
rtmProvider.msgLuckyGiftRewardTickerListener = null;
RoomEntranceHelper.clearQueue();
OverlayManager().removeRoom();
SCRoomEffectScheduler().clearDeferredTasks(
reason: 'room_minimize',
);
SCGiftVapSvgaManager().stopPlayback();
unawaited(context.read<RoomMusicManager>().stopForRoomExit());
giftAnimationManager.cleanupAnimationResources();
SCFloatIchart().show();
SCNavigatorUtils.popUntil(
context,
ModalRoute.withName(SCRoutes.home),
);
},
),
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);
},
),
],
),
],
);
}
}