import 'package:flutter/material.dart'; import 'package:flutter_custom_toolbox/flutter_toolbox.dart'; import 'package:puissance4/common/ui/parameters/parameter_painter.dart'; import 'package:puissance4/config/default_activity_settings.dart'; import 'package:puissance4/models/settings/settings_activity.dart'; import 'package:puissance4/models/settings/settings_global.dart'; class ParameterWidget extends StatelessWidget { const ParameterWidget({ super.key, required this.code, required this.value, required this.isSelected, required this.size, required this.activitySettings, required this.globalSettings, required this.onPressed, }); final String code; final String value; final bool isSelected; final double size; final ActivitySettings activitySettings; 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 DefaultActivitySettings.parameterCodeGameMode: content = getGameModeParameterItem(); break; case DefaultActivitySettings.parameterCodeSize: content = getSizeParameterItem(value); 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 getGameModeParameterItem() { String text = ''; Color baseColor = Colors.grey; switch (value) { case DefaultActivitySettings.gameModeHumanVsHuman: text = '🧑 🧑'; baseColor = Colors.green; break; case DefaultActivitySettings.gameModeHumanVsRobot: text = '🧑 🤖'; baseColor = Colors.pink; break; case DefaultActivitySettings.gameModeRobotVsHuman: text = '🤖 🧑'; baseColor = Colors.pink; break; case DefaultActivitySettings.gameModeRobotVsRobot: text = '🤖 🤖'; baseColor = Colors.brown; break; default: } return StyledButton.text( caption: text, color: baseColor, onPressed: onPressed, ); } Widget getSizeParameterItem(final String value) { Color backgroundColor = Colors.grey; switch (value) { case DefaultActivitySettings.sizeValueMedium: backgroundColor = Colors.orange; 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, activitySettings: activitySettings, globalSettings: globalSettings, ), isComplex: true, ), ); } }