Skip to content
Snippets Groups Projects
parameters.dart 4.30 KiB
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),
    );
  }
}