import 'package:flutter/material.dart'; import '../provider/data.dart'; import '../utils/board_utils.dart'; class Board { static Container buildGameBoard(Data myProvider) { Color borderColor = myProvider.reportMode ? Colors.blue : Colors.black; return Container( margin: EdgeInsets.all(2), padding: EdgeInsets.all(2), decoration: BoxDecoration( color: borderColor, borderRadius: BorderRadius.circular(2), border: Border.all( color: borderColor, width: 2, ), ), child: Column( children: [ buildGameTileset(myProvider), buildMinesCounterWidget(myProvider), ], ), ); } static Table buildGameTileset(Data myProvider) { List cells = myProvider.cells; return Table( defaultColumnWidth: IntrinsicColumnWidth(), children: [ for (var row = 0; row < myProvider.sizeVertical; row++) TableRow(children: [ for (var col = 0; col < myProvider.sizeHorizontal; col++) Column(children: [ cells[row][col].widget( myProvider, row, col ) ]), ]), ] ); } static FlatButton buildToggleFlagModeButton(Data myProvider) { String reportModeSuffix = myProvider.reportMode ? 'on' : 'off'; return FlatButton( child: Container( child: Image( image: AssetImage('assets/skins/' + myProvider.skin + '_button_mark_mine_' + reportModeSuffix + '.png'), fit: BoxFit.fill, ), ), onPressed: () => myProvider.updateReportMode(!myProvider.reportMode), ); } static Table buildToggleFlagModeLayout(Data myProvider) { Image paddingBlock = Image( image: AssetImage('assets/skins/empty.png'), fit: BoxFit.fill, ); return Table( defaultColumnWidth: IntrinsicColumnWidth(), children: [ TableRow( children: [ TableCell(child: paddingBlock), TableCell(child: paddingBlock), TableCell(child: buildToggleFlagModeButton(myProvider)), TableCell(child: paddingBlock), TableCell(child: paddingBlock), ], ), ], ); } static Widget buildMinesCounterWidget(Data myProvider) { int flaggedCellsCount = BoardUtils.countFlaggedCells(myProvider.cells); int minesCount = myProvider.minesCount; double blockSize = 40; Image flagIconBlock = Image( image: AssetImage('assets/skins/' + myProvider.skin + '_tile_flag.png'), fit: BoxFit.fill, height: blockSize, width: blockSize, ); Image mineIconBlock = Image( image: AssetImage('assets/skins/' + myProvider.skin + '_tile_mine.png'), fit: BoxFit.fill, height: blockSize, width: blockSize, ); Text markedMinesCountBlock = Text( flaggedCellsCount.toString(), style: TextStyle( fontSize: blockSize, fontWeight: FontWeight.bold, color: Colors.white ), ); Text placedMinesCountBlock = Text( minesCount.toString(), style: TextStyle( fontSize: blockSize, fontWeight: FontWeight.bold, color: Colors.white ), ); 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, ], ) ]); } }