import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:mchess/chess/chess_square_outer_dragtarget.dart'; import 'package:mchess/chess_bloc/chess_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) { Color lightSquaresColor = wasPartOfLastMove ? Colors.green.shade200 : Colors.brown.shade50; Color darkSquaresColor = wasPartOfLastMove ? Colors.green.shade300 : Colors.brown.shade400; 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 { late Color squareColor; @override void initState() { squareColor = widget.color; super.initState(); } @override Widget build(BuildContext context) { return BlocListener( listenWhen: (previous, current) { return true; }, listener: (context, state) { setState(() { squareColor = Colors.red; }); }, child: Container( color: widget.color, child: ChessSquareOuterDragTarget( coordinate: widget.coordinate, containedPiece: widget.containedPiece ?? const ChessPiece.none()), ), ); } }