import 'package:flutter/material.dart'; import 'package:fluttericon/font_awesome_icons.dart'; import 'package:tallee/core/common.dart'; import 'package:tallee/core/constants.dart'; import 'package:tallee/core/custom_theme.dart'; import 'package:tallee/core/enums.dart'; import 'package:tallee/l10n/generated/app_localizations.dart'; import 'package:tallee/presentation/widgets/buttons/haptic_icon_button.dart'; import 'package:tallee/presentation/widgets/text_input/text_input_field.dart'; class TeamCreationTile extends StatefulWidget { const TeamCreationTile({ super.key, required this.color, required this.controller, required this.hintText, this.onDelete, this.onColorSelection, }); final AppColor color; final TextEditingController controller; final String hintText; final VoidCallback? onDelete; final ValueChanged? onColorSelection; @override State createState() => _TeamCreationTileState(); } class _TeamCreationTileState extends State { final teamColors = List.generate( AppColor.values.length, (index) => getTeamColor(index), ); @override Widget build(BuildContext context) { final loc = AppLocalizations.of(context); return Container( margin: CustomTheme.standardMargin, decoration: CustomTheme.standardBoxDecoration, clipBehavior: Clip.antiAlias, child: IntrinsicHeight( child: Row( crossAxisAlignment: CrossAxisAlignment.stretch, children: [ Expanded( child: Padding( padding: const EdgeInsets.symmetric( vertical: 12, horizontal: 6, ), child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ // Name input + delete icon Row( crossAxisAlignment: CrossAxisAlignment.center, mainAxisAlignment: MainAxisAlignment.center, children: [ Expanded( child: TextInputField( controller: widget.controller, hintText: widget.hintText, maxLength: Constants.MAX_TEAM_NAME_LENGTH, ), ), HapticIconButton( icon: const Icon(FontAwesome.trash), color: CustomTheme.textColor, iconSize: 25, onPressed: widget.onDelete, ), ], ), const SizedBox(height: 12), // Color label Padding( padding: const EdgeInsets.only(left: 8), child: Text( loc.color, style: const TextStyle( fontSize: 15, fontWeight: FontWeight.bold, color: CustomTheme.textColor, ), ), ), const SizedBox(height: 8), // Color picker Padding( padding: const EdgeInsets.symmetric(horizontal: 12), child: Wrap( spacing: 8, runSpacing: 8, children: teamColors.map((color) { final isSelected = widget.color == color; return GestureDetector( onTap: () { widget.onColorSelection?.call(color); }, child: Container( width: 34, height: 34, decoration: BoxDecoration( color: getColorFromGameColor(color), shape: BoxShape.circle, border: Border.all( color: isSelected ? Colors.white : Colors.transparent, width: 3, ), ), child: isSelected ? const Icon( Icons.check, size: 18, color: Colors.white, ) : null, ), ); }).toList(), ), ), ], ), ), ), ], ), ), ); } }