import 'package:flutter/material.dart'; import 'package:mchess/chess/chess_square_outer_dragtarget.dart'; import 'package:mchess/chess_bloc/tap_bloc.dart'; import '../utils/chess_utils.dart'; class ChessSquare extends StatefulWidget { final ChessCoordinate coordinate; final ChessPiece? containedPiece; static const double pieceWidth = 200; static const double pieceHeight = 200; final Color color; const ChessSquare._({ required this.coordinate, required this.containedPiece, required this.color, }); factory ChessSquare(ChessCoordinate coord, ChessPiece? piece, bool wasPartOfLastMove, bool wasTapped) { Color lightSquaresColor = wasPartOfLastMove ? Colors.green.shade200 : Colors.brown.shade50; Color darkSquaresColor = wasPartOfLastMove ? Colors.green.shade300 : Colors.brown.shade400; if (wasTapped) { lightSquaresColor = Colors.red.shade200; darkSquaresColor = Colors.red.shade300; } Color squareColor; if (coord.row % 2 == 0) { if (coord.column % 2 == 0) { squareColor = darkSquaresColor; } else { squareColor = lightSquaresColor; } } else { if (coord.column % 2 == 0) { squareColor = lightSquaresColor; } else { squareColor = darkSquaresColor; } } return ChessSquare._( coordinate: coord, containedPiece: piece, color: squareColor, ); } @override State createState() => _ChessSquareState(); } class _ChessSquareState extends State { @override Widget build(BuildContext context) { var dragTarget = Container( color: widget.color, child: ChessSquareOuterDragTarget( coordinate: widget.coordinate, containedPiece: widget.containedPiece ?? const ChessPiece.none()), ); if (widget.containedPiece == null) { return GestureDetector( child: dragTarget, onTap: () { TapBloc().add(SquareTappedEvent( tapped: widget.coordinate, pieceOnSquare: widget.containedPiece)); }, ); } else { return dragTarget; } } }