Marco
b9d574f2ab
In window widths or heigths that are not divisible by 8, the chess board would contain lines between the squares (since the contraints of the chess board rows would contain non-integer constraints). With this commit, we calculate margins manually, in order to constrict the chess board to widths and heights that are divisible by 8.
87 lines
2.2 KiB
Dart
87 lines
2.2 KiB
Dart
import 'package:flutter/material.dart';
|
|
import 'package:flutter_bloc/flutter_bloc.dart';
|
|
import 'package:go_router/go_router.dart';
|
|
import 'package:mchess/chess_bloc/chess_bloc.dart';
|
|
|
|
import 'package:mchess/chess/chess_board.dart';
|
|
import 'package:mchess/chess_bloc/promotion_bloc.dart';
|
|
import 'package:mchess/utils/chess_utils.dart';
|
|
import 'package:mchess/utils/widgets/promotion_dialog.dart';
|
|
import 'package:uuid/uuid.dart';
|
|
|
|
class ChessGame extends StatefulWidget {
|
|
final UuidValue playerID;
|
|
final UuidValue lobbyID;
|
|
final String? passphrase;
|
|
const ChessGame(
|
|
{required this.playerID,
|
|
required this.lobbyID,
|
|
required this.passphrase,
|
|
super.key});
|
|
|
|
@override
|
|
State<ChessGame> createState() => _ChessGameState();
|
|
}
|
|
|
|
class _ChessGameState extends State<ChessGame> {
|
|
@override
|
|
void initState() {
|
|
super.initState();
|
|
}
|
|
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
return Scaffold(
|
|
body: Center(
|
|
child: Container(
|
|
margin: const EdgeInsets.all(10),
|
|
child: BlocListener<PromotionBloc, PromotionState>(
|
|
listener: (context, state) {
|
|
if (state.showPromotionDialog) {
|
|
promotionDialogBuilder(context, state.colorMoved);
|
|
}
|
|
},
|
|
child: BlocBuilder<ChessBloc, ChessBoardState>(
|
|
builder: (context, state) {
|
|
return ChessBoard(
|
|
boardState: state,
|
|
);
|
|
},
|
|
),
|
|
),
|
|
),
|
|
),
|
|
floatingActionButton: FloatingActionButton(
|
|
onPressed: () {
|
|
context.push('/');
|
|
},
|
|
child: const Icon(Icons.cancel),
|
|
),
|
|
);
|
|
}
|
|
|
|
Future<void> promotionDialogBuilder(BuildContext context, ChessColor color) {
|
|
return showDialog<void>(
|
|
context: context,
|
|
barrierDismissible: false,
|
|
builder: (BuildContext context) {
|
|
return PromotionDialog(
|
|
sideColor: color,
|
|
);
|
|
},
|
|
);
|
|
}
|
|
}
|
|
|
|
class ChessGameArguments {
|
|
final UuidValue lobbyID;
|
|
final UuidValue playerID;
|
|
final String? passphrase;
|
|
|
|
ChessGameArguments({
|
|
required this.lobbyID,
|
|
required this.playerID,
|
|
required this.passphrase,
|
|
});
|
|
}
|