import 'package:flutter/material.dart'; import 'package:flutter_custom_toolbox/flutter_toolbox.dart'; import 'package:jeweled/config/default_game_settings.dart'; import 'package:jeweled/config/default_global_settings.dart'; import 'package:jeweled/models/settings/settings_game.dart'; import 'package:jeweled/models/settings/settings_global.dart'; import 'package:jeweled/ui/parameters/parameter_painter.dart'; class ParameterWidget extends StatelessWidget { const ParameterWidget({ super.key, required this.code, required this.value, required this.isSelected, required this.size, required this.gameSettings, required this.globalSettings, required this.onPressed, }); final String code; final String value; final bool isSelected; final double size; final GameSettings gameSettings; final GlobalSettings globalSettings; final VoidCallback onPressed; static const Color buttonColorActive = Colors.blue; static const Color buttonColorInactive = Colors.white; static const double buttonBorderWidth = 4.0; static const double buttonBorderRadius = 12.0; @override Widget build(BuildContext context) { Widget content = const SizedBox.shrink(); switch (code) { case DefaultGameSettings.parameterCodeColorsCount: content = getColorsCountParameterItem(); break; case DefaultGameSettings.parameterCodeBoardSize: content = getBoardSizeParameterItem(); break; case DefaultGlobalSettings.parameterCodeColorsTheme: content = getColorsThemeParameterItem(); break; case DefaultGlobalSettings.parameterCodeGraphicsTheme: content = getGraphicsThemeParameterItem(); break; default: printlog('Unknown parameter: $code/$value'); content = getUnknownParameterItem(); } final Color buttonColor = isSelected ? buttonColorActive : buttonColorInactive; return Container( decoration: BoxDecoration( color: buttonColor, borderRadius: BorderRadius.circular(buttonBorderRadius), border: Border.all( color: buttonColor, width: buttonBorderWidth, ), ), child: content, ); } // "unknown" parameter -> simple block with text Widget getUnknownParameterItem() { return StyledButton.text( caption: '$code / $value', color: Colors.grey, onPressed: null, ); } Widget getColorsCountParameterItem() { Color backgroundColor = Colors.grey; switch (value) { case DefaultGameSettings.colorsCountValueLow: backgroundColor = Colors.green; break; case DefaultGameSettings.colorsCountValueMedium: backgroundColor = Colors.orange; break; case DefaultGameSettings.colorsCountValueHigh: backgroundColor = Colors.red; break; case DefaultGameSettings.colorsCountValueVeryHigh: backgroundColor = Colors.purple; break; default: printlog('Wrong value for colorsCount parameter value: $value'); } return StyledButton( color: backgroundColor, onPressed: onPressed, child: CustomPaint( size: Size(size, size), willChange: false, painter: ParameterPainter( code: code, value: value, gameSettings: gameSettings, globalSettings: globalSettings, ), isComplex: true, ), ); } Widget getBoardSizeParameterItem() { Color backgroundColor = Colors.grey; switch (value) { case DefaultGameSettings.boardSizeValueSmall: backgroundColor = Colors.green; break; case DefaultGameSettings.boardSizeValueMedium: backgroundColor = Colors.orange; break; case DefaultGameSettings.boardSizeValueLarge: backgroundColor = Colors.red; break; case DefaultGameSettings.boardSizeValueExtraLarge: backgroundColor = Colors.purple; break; default: printlog('Wrong value for boardSize parameter value: $value'); } return StyledButton( color: backgroundColor, onPressed: onPressed, child: CustomPaint( size: Size(size, size), willChange: false, painter: ParameterPainter( code: code, value: value, gameSettings: gameSettings, globalSettings: globalSettings, ), isComplex: true, ), ); } Widget getColorsThemeParameterItem() { Color backgroundColor = Colors.grey; return StyledButton( color: backgroundColor, onPressed: onPressed, child: CustomPaint( size: Size(size, size), willChange: false, painter: ParameterPainter( code: code, value: value, gameSettings: gameSettings, globalSettings: globalSettings, ), isComplex: true, ), ); } Widget getGraphicsThemeParameterItem() { Color backgroundColor = Colors.grey; return StyledButton( color: backgroundColor, onPressed: onPressed, child: CustomPaint( size: Size(size, size), willChange: false, painter: ParameterPainter( code: code, value: value, gameSettings: gameSettings, globalSettings: globalSettings, ), isComplex: true, ), ); } }