import 'package:flutter/material.dart'; import '../layout/board.dart'; import '../provider/data.dart'; import '../utils/board_utils.dart'; import '../utils/game_utils.dart'; class Game { static Container buildGameWidget(Data myProvider) { bool gameIsFinished = myProvider.gameWin || myProvider.gameFail; 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) : Board.buildToggleFlagModeLayout(myProvider), ), SizedBox(height: 8), ], ), ); } static Widget buildTopIndicatorWidget(Data myProvider) { int flaggedCellsCount = BoardUtils.countFlaggedCells(myProvider.cells); int minesCount = myProvider.minesCount; double blockSize = 40; Image flagIconBlock = Image( image: AssetImage('assets/skins/' + myProvider.parameterSkin + '_tile_flag.png'), fit: BoxFit.fill, height: blockSize, width: blockSize, ); Image mineIconBlock = Image( image: AssetImage('assets/skins/' + myProvider.parameterSkin + '_tile_mine.png'), fit: BoxFit.fill, height: blockSize, width: blockSize, ); Text markedMinesCountBlock = Text( flaggedCellsCount.toString(), style: TextStyle( fontSize: blockSize, fontWeight: FontWeight.bold, color: Colors.black ), ); Text placedMinesCountBlock = Text( minesCount.toString(), style: TextStyle( fontSize: blockSize, fontWeight: FontWeight.bold, color: Colors.black ), ); return Column( mainAxisAlignment: MainAxisAlignment.center, crossAxisAlignment: CrossAxisAlignment.center, children: [ Row( mainAxisAlignment: MainAxisAlignment.center, crossAxisAlignment: CrossAxisAlignment.center, children: [ markedMinesCountBlock, flagIconBlock, SizedBox(width: blockSize * 2), mineIconBlock, placedMinesCountBlock, ], ) ]); } static FlatButton buildRestartGameButton(Data myProvider) { return FlatButton( child: Container( child: Image( image: AssetImage('assets/icons/button_back.png'), fit: BoxFit.fill, ), ), onPressed: () => GameUtils.resetGame(myProvider), ); } static Container buildEndGameMessage(Data myProvider) { Image decorationImage = Image( image: AssetImage( myProvider.gameWin ? 'assets/icons/game_win.png' : myProvider.gameFail ? 'assets/icons/game_fail.png' : '' ), 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: [ myProvider.animationInProgress ? decorationImage : buildRestartGameButton(myProvider) ]), Column(children: [ decorationImage ]), ], ), ] ) ); } }