75 lines
1.9 KiB
Dart
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,
|
|
);
|
|
}
|
|
}
|