import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:mchess/chess_bloc/chess_bloc.dart'; import 'package:mchess/chess_bloc/chess_position.dart'; import 'package:mchess/utils/chess_utils.dart'; class MoveHistory extends StatefulWidget { const MoveHistory({super.key}); @override State createState() => _MoveHistoryState(); } class _MoveHistoryState extends State { ChessMoveHistory allMoves = []; List entries = []; @override void initState() { super.initState(); } @override Widget build(BuildContext context) { return BlocBuilder(builder: (context, state) { //We do not use the state, we just use the ChessBloc as a trigger var positionManager = ChessPositionManager.getInstance(); if (positionManager.lastMove == null) return Container(); var pieceMoved = positionManager.getPieceAt(positionManager.lastMove!.to); var pieceChar = pieceCharacter[ChessPieceAssetKey( //we take the opposite color because we use dark theme. White pieces appear black and vice versa. pieceClass: pieceMoved!.pieceClass, color: pieceMoved.color.getOpposite())]; if (pieceMoved.color == ChessColor.white) { var entry = HistoryEntry(); entry.setWhite( pieceChar!, positionManager.lastMove!.to.toAlphabetical()); entries.add(entry); } else { var entry = entries.last; entry.setBlack( pieceChar!, positionManager.lastMove!.to.toAlphabetical()); } return ListView.builder( itemCount: entries.length, itemBuilder: (context, index) { return Text( entries[index].toString(), style: const TextStyle(fontSize: 20), ); }, ); }); } } class HistoryEntry { String? wChar; String? wTo; String? bChar; String? bTo; HistoryEntry(); void setWhite(String char, to) { wChar = char; wTo = to; } void setBlack(String char, to) { bChar = char; bTo = to; } @override String toString() { String entry = ""; if (wChar != null) { entry = "$entry$wChar$wTo"; } if (bChar != null) { entry = "$entry\t\t$bChar$bTo"; } return entry; } }