import 'package:flutter/material.dart'; import 'package:minehunter/provider/data.dart'; import 'package:minehunter/utils/game_utils.dart'; class Parameters { static double separatorHeight = 2.0; static double blockMargin = 3.0; static double blockPadding = 2.0; static Color buttonBackgroundColor = Colors.white; static Color buttonBorderColorActive = Colors.blue; static Color buttonBorderColorInactive = Colors.white; static double buttonBorderWidth = 10.0; static double buttonBorderRadius = 8.0; static double buttonPadding = 0.0; static double buttonMargin = 0.0; static Container buildParametersSelector(Data myProvider) { List<Widget> lines = []; List parameters = myProvider.availableParameters; for (var index = 0; index < parameters.length; index++) { lines.add(buildParameterSelector(myProvider, parameters[index])); lines.add(SizedBox(height: separatorHeight)); } return Container( child: Column( mainAxisAlignment: MainAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.center, children: [ SizedBox(height: separatorHeight), Expanded( child: Column( mainAxisSize: MainAxisSize.min, mainAxisAlignment: MainAxisAlignment.center, children: lines, ), ), SizedBox(height: separatorHeight), Container( child: buildStartNewGameButton(myProvider), ), ], ), ); } static Image buildImageWidget(String imageAssetCode) { return Image( image: AssetImage('assets/icons/' + imageAssetCode + '.png'), fit: BoxFit.fill, ); } static Container buildImageContainerWidget(String imageAssetCode) { return Container( child: buildImageWidget(imageAssetCode), ); } static Column buildDecorationImageWidget() { return Column( children: [ TextButton( child: buildImageContainerWidget('placeholder'), onPressed: () => null, ), ], ); } static Container buildStartNewGameButton(Data myProvider) { return Container( margin: EdgeInsets.all(blockMargin), padding: EdgeInsets.all(blockPadding), child: Table( defaultColumnWidth: IntrinsicColumnWidth(), children: [ TableRow( children: [ buildDecorationImageWidget(), Column( children: [ TextButton( child: buildImageContainerWidget('button_start'), onPressed: () => GameUtils.startNewGame(myProvider), ), ], ), buildDecorationImageWidget(), ], ), ], ), ); } static Widget buildParameterSelector(Data myProvider, String parameterCode) { List availableValues = myProvider.getParameterAvailableValues(parameterCode); if (availableValues.length == 1) { return SizedBox(height: 0.0); } return Table( defaultColumnWidth: IntrinsicColumnWidth(), children: [ TableRow( children: [ for (var index = 0; index < availableValues.length; index++) Column( children: [ _buildParameterButton(myProvider, parameterCode, availableValues[index]) ], ), ], ), ], ); } static Widget _buildParameterButton( Data myProvider, String parameterCode, String parameterValue) { String currentValue = myProvider.getParameterValue(parameterCode).toString(); bool isActive = (parameterValue == currentValue); String imageAsset = parameterCode + '_' + parameterValue; return TextButton( child: Container( margin: EdgeInsets.all(buttonMargin), padding: EdgeInsets.all(buttonPadding), decoration: BoxDecoration( color: buttonBackgroundColor, borderRadius: BorderRadius.circular(buttonBorderRadius), border: Border.all( color: isActive ? buttonBorderColorActive : buttonBorderColorInactive, width: buttonBorderWidth, ), ), child: buildImageWidget(imageAsset), ), onPressed: () => myProvider.setParameterValue(parameterCode, parameterValue), ); } }