import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:unicons/unicons.dart'; import 'package:random/cubit/game_cubit.dart'; import 'package:random/models/game/game.dart'; import 'package:random/ui/widgets/game/game_settings.dart'; import 'package:random/ui/widgets/game/game_board.dart'; class GamePage extends StatefulWidget { const GamePage({super.key}); @override State<GamePage> createState() => _GamePageState(); } class _GamePageState extends State<GamePage> { Widget buildGameActionsBloc(BuildContext context) { return BlocBuilder<GameCubit, GameState>(builder: (context, gameState) { final GameCubit gameCubit = BlocProvider.of<GameCubit>(context); final List<Widget> buttons = [ IconButton( onPressed: () { gameCubit.updateGameState(Game.createNew()); }, icon: const Icon(UniconsSolid.star), color: Theme.of(context).colorScheme.primary, ) ]; if (gameState.game?.isRunning == true) { buttons.add(IconButton( onPressed: () { final Game currentGame = gameCubit.state.game!; currentGame.stop(); gameCubit.updateGameState(currentGame); setState(() {}); }, icon: const Icon(UniconsLine.exit), color: Theme.of(context).colorScheme.primary, )); } return Row( mainAxisAlignment: MainAxisAlignment.center, crossAxisAlignment: CrossAxisAlignment.center, children: buttons, ); }); } @override Widget build(BuildContext context) { const double boardWidgetWidth = 300; const double boardWidgetHeight = 300; return BlocBuilder<GameCubit, GameState>( builder: (context, gameState) { return Column( mainAxisAlignment: MainAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.center, children: [ gameState.game?.isRunning == true ? GameBoardWidget( game: gameState.game!, widgetSize: const Size(boardWidgetWidth, boardWidgetHeight), ) : const GameSettingsWidget(), buildGameActionsBloc(context), ], ); }, ); } }