import 'package:flutter/material.dart'; import 'package:solitaire_game/layout/board.dart'; import 'package:solitaire_game/provider/data.dart'; import 'package:solitaire_game/utils/game_utils.dart'; class Game { static Container buildGameWidget(Data myProvider) { bool gameIsFinished = myProvider.isGameFinished; return Container( child: Column( mainAxisAlignment: MainAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.center, children: [ SizedBox(height: 8), Game.buildTopIndicatorWidget(myProvider), SizedBox(height: 2), Expanded( child: Board.buildGameBoard(myProvider), ), SizedBox(height: 2), Container( child: gameIsFinished ? Game.buildEndGameMessage(myProvider) : SizedBox(height: 2), ), ], ), ); } static Widget buildTopIndicatorWidget(Data myProvider) { return Table( children: [ TableRow( children: [ Column( children: [ Text( '♟️ ' + myProvider.remainingPegsCount.toString(), style: TextStyle( fontSize: 40, fontWeight: FontWeight.w600, color: Colors.black, ), ), ], ), Column( children: [ Text( myProvider.movesCount.toString(), style: TextStyle( fontSize: 20, fontWeight: FontWeight.w600, color: Colors.green, ), ), ], ), ], ), ], ); } static TextButton buildQuitGameButton(Data myProvider) { return TextButton( child: Container( child: Image( image: AssetImage('assets/icons/button_back.png'), fit: BoxFit.fill, ), ), onPressed: () => GameUtils.quitGame(myProvider), ); } static Container buildEndGameMessage(Data myProvider) { String decorationImageAssetName = ''; if (myProvider.gameWon()) { decorationImageAssetName = 'assets/icons/game_win.png'; } else { decorationImageAssetName = 'assets/icons/game_fail.png'; } Image decorationImage = Image( image: AssetImage(decorationImageAssetName), fit: BoxFit.fill, ); return Container( margin: EdgeInsets.all(2), padding: EdgeInsets.all(2), child: Table( defaultColumnWidth: IntrinsicColumnWidth(), children: [ TableRow( children: [ Column( children: [decorationImage], ), Column( children: [buildQuitGameButton(myProvider)], ), Column( children: [decorationImage], ), ], ), ], ), ); } }