Marco
8f4cd2266f
This is another step to allow reconnecting after connection loss or browser closing. When the game is left with the X button on the bottom right, we will close the websocket connection, to let the server know, that we are gone. The server still has issues that prevent this from working flawlessly. Remove unused import
84 lines
2.1 KiB
Dart
84 lines
2.1 KiB
Dart
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<ChessSquare> createState() => _ChessSquareState();
|
|
}
|
|
|
|
class _ChessSquareState extends State<ChessSquare> {
|
|
late Color squareColor;
|
|
|
|
@override
|
|
void initState() {
|
|
squareColor = widget.color;
|
|
super.initState();
|
|
}
|
|
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
return BlocListener<ChessBloc, ChessBoardState>(
|
|
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()),
|
|
),
|
|
);
|
|
}
|
|
}
|