yumi-flutter/lib/ui_kit/widgets/room/room_game_bottom_sheet.dart
2026-05-22 17:35:49 +08:00

75 lines
1.9 KiB
Dart

import 'dart:async';
import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:yumi/modules/room_game/views/room_game_list_sheet.dart';
import 'package:yumi/shared/tools/sc_lk_dialog_util.dart';
import 'package:yumi/shared/tools/sc_room_top_layer_guard.dart';
import 'package:yumi/ui_kit/components/sc_debounce_widget.dart';
import 'package:yumi/ui_kit/widgets/svga/sc_svga_asset_widget.dart';
void showRoomGameListSheet(BuildContext context, {String? initialGameId}) {
if (!context.mounted) {
return;
}
final guardLease = SCRoomTopLayerGuard().acquire(
reason: 'room_game_list_sheet',
);
try {
unawaited(
showBottomInBottomDialog(
context,
RoomGameBottomSheet(roomContext: context, initialGameId: initialGameId),
barrierColor: Colors.black54,
).whenComplete(guardLease.release),
);
} catch (_) {
guardLease.release();
}
}
class RoomGameEntryButton extends StatelessWidget {
const RoomGameEntryButton({super.key});
@override
Widget build(BuildContext context) {
return SCDebounceWidget(
onTap: () {
showRoomGameListSheet(context);
},
child: SCSvgaAssetWidget(
assetPath: "sc_images/room/sc_icon_room_game_entry_anim.svga",
width: 44.w,
height: 44.w,
active: true,
loop: true,
fallback: Image.asset(
"sc_images/room/sc_icon_botton_game.png",
width: 44.w,
height: 44.w,
fit: BoxFit.contain,
),
),
);
}
}
class RoomGameBottomSheet extends StatelessWidget {
const RoomGameBottomSheet({
super.key,
required this.roomContext,
this.initialGameId,
});
final BuildContext roomContext;
final String? initialGameId;
@override
Widget build(BuildContext context) {
return RoomGameListSheet(
roomContext: roomContext,
initialGameId: initialGameId,
);
}
}