import 'package:flutter/material.dart'; import '../provider/data.dart'; import '../utils/game_utils.dart'; class Board { static Container buildGameBoard(Data myProvider) { String skin = myProvider.skin; int maxGuessesCount = myProvider.maxGuessesCount; int wordLength = int.parse(myProvider.length); Widget buildCellWidget(String cellValue, String cellTip) { Color textColor = Colors.white; String cellImage = 'empty'; if (cellTip != '') { cellImage = cellTip; } Image imageWidget = Image( image: AssetImage('assets/skins/'+skin+'_'+cellImage+'.png'), fit: BoxFit.fill ); Text textWidget = Text( cellValue, style: TextStyle( color: textColor, fontSize: 40.0, fontWeight: FontWeight.w900, ), textAlign: TextAlign.center ); return Stack( alignment: Alignment.center, children: <Widget>[ imageWidget, Center(child: textWidget), ] ); } List<String> guesses = myProvider.guesses; List<TableRow> tableRows = []; for (int lineIndex = 0; lineIndex < maxGuessesCount; lineIndex++) { String word = ''; if (lineIndex < guesses.length) { word = guesses[lineIndex]; } else if (lineIndex == guesses.length) { word = myProvider.currentGuess; } List<String> tips = GameUtils.getTips(myProvider, word); List<Column> tableCells = []; for (int colIndex = 0; colIndex < wordLength; colIndex++) { String cellValue = ' '; if (word.length > colIndex) { cellValue = word[colIndex]; } String cellTip = ''; if (lineIndex < guesses.length) { cellTip = tips[colIndex]; } tableCells.add( Column( children: [ buildCellWidget(cellValue, cellTip) ] ) ); }; tableRows.add( TableRow( children: tableCells ) ); } return Container( margin: EdgeInsets.symmetric(horizontal: 30), padding: EdgeInsets.all(2), child: Table( defaultVerticalAlignment: TableCellVerticalAlignment.middle, border: TableBorder.all( width: 2.0, color: Colors.white, style: BorderStyle.solid, ), children: tableRows, ) ); } }