import 'package:flutter/material.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:flutter_smart_dialog/flutter_smart_dialog.dart'; import 'package:yumi/ui_kit/widgets/room/rocket/room_rocket_dialog.dart'; import 'package:yumi/ui_kit/widgets/room/rocket/room_rocket_note_dialog.dart'; import 'package:yumi/ui_kit/widgets/room/rocket/room_rocket_record_dialog.dart'; import 'package:yumi/ui_kit/widgets/room/rocket/room_rocket_reward_dialog.dart'; void main() { runApp(const RoomRocketDialogPreviewApp()); } class RoomRocketDialogPreviewApp extends StatelessWidget { const RoomRocketDialogPreviewApp({super.key}); @override Widget build(BuildContext context) { return ScreenUtilInit( designSize: const Size(375, 812), minTextAdapt: true, splitScreenMode: true, builder: (_, child) => MaterialApp( debugShowCheckedModeBanner: false, builder: FlutterSmartDialog.init(), home: const _RoomRocketDialogPreviewPage(), ), ); } } class _RoomRocketDialogPreviewPage extends StatefulWidget { const _RoomRocketDialogPreviewPage(); @override State<_RoomRocketDialogPreviewPage> createState() => _RoomRocketDialogPreviewPageState(); } class _RoomRocketDialogPreviewPageState extends State<_RoomRocketDialogPreviewPage> { RoomRocketRewardItem? _selectedReward; _PreviewDialog _dialog = _PreviewDialog.rocket; @override Widget build(BuildContext context) { return Scaffold( backgroundColor: Colors.black, body: Stack( fit: StackFit.expand, children: [ const _RoomBackground(), if (_dialog == _PreviewDialog.rocket) RoomRocketDialog( onRewardSelected: (reward) => setState(() { _selectedReward = reward; _dialog = _PreviewDialog.reward; }), onOpenRecord: () => setState(() => _dialog = _PreviewDialog.record), onOpenNote: () => setState(() => _dialog = _PreviewDialog.note), ) else if (_dialog == _PreviewDialog.reward) RoomRocketRewardDialog( selectedReward: _selectedReward, onClose: _backToRocket, ) else if (_dialog == _PreviewDialog.record) RoomRocketRecordDialog(onClose: _backToRocket) else RoomRocketNoteDialog(onClose: _backToRocket), ], ), ); } void _backToRocket() { setState(() { _selectedReward = null; _dialog = _PreviewDialog.rocket; }); } } enum _PreviewDialog { rocket, reward, record, note } class _RoomBackground extends StatelessWidget { const _RoomBackground(); @override Widget build(BuildContext context) { return DecoratedBox( decoration: const BoxDecoration( gradient: LinearGradient( begin: Alignment.topCenter, end: Alignment.bottomCenter, colors: [Color(0xFF2A120E), Color(0xFF071917), Color(0xFF22140B)], ), ), child: Stack( children: [ Positioned( left: 20.w, top: 48.w, child: _PreviewLine(width: 104.w, opacity: 0.42), ), for (var index = 0; index < 8; index++) Positioned( left: (40 + (index % 4) * 72).w, top: (146 + (index ~/ 4) * 84).w, child: const _PreviewSeat(), ), Positioned( left: 0, right: 0, bottom: 118.w, child: _PreviewLine(width: 330.w, opacity: 0.28), ), ], ), ); } } class _PreviewSeat extends StatelessWidget { const _PreviewSeat(); @override Widget build(BuildContext context) { return DecoratedBox( decoration: BoxDecoration( shape: BoxShape.circle, border: Border.all( color: const Color(0xFFFFCE7C).withValues(alpha: 0.32), width: 2.w, ), ), child: SizedBox(width: 44.w, height: 44.w), ); } } class _PreviewLine extends StatelessWidget { const _PreviewLine({required this.width, required this.opacity}); final double width; final double opacity; @override Widget build(BuildContext context) { return Center( child: Container( width: width, height: 1.w, color: Colors.white.withValues(alpha: opacity), ), ); } }