keyboard function
Generates the keyboard.
Generally use this with .join('\n')
to create a human-readable board:
final actual = keyboard().join('\n');
const matcher = '''
┌─────────────────────┐
│ Q W E R T Y U I O P │
│ A S D F G H J K L │
│ Z X C V B N M │
└─────────────────────┘''';
assert(actual == matcher);
Implementation
Iterable<String> keyboard({
Iterable<Letter> playedLetters = const [],
}) sync* {
final hits =
playedLetters.where((letter) => letter.status == LetterStatus.hit);
final misses =
playedLetters.where((letter) => letter.status == LetterStatus.miss);
final closes =
playedLetters.where((letter) => letter.status == LetterStatus.close);
const qwer = ['Q', 'W', 'E', 'R', 'T', 'Y', 'U', 'I', 'O', 'P'];
const asdf = ['A', 'S', 'D', 'F', 'G', 'H', 'J', 'K', 'L'];
const zxcv = ['Z', 'X', 'C', 'V', 'B', 'N', 'M'];
final _qwer = keyboardRow(
qwer,
close,
hit,
miss,
hits: hits,
misses: misses,
closes: closes,
).join(' ');
final _asdf = keyboardRow(
asdf,
close,
hit,
miss,
hits: hits,
misses: misses,
closes: closes,
).join(' ');
final _zxcv = keyboardRow(
zxcv,
close,
hit,
miss,
hits: hits,
misses: misses,
closes: closes,
).join(' ');
yield '┌─────────────────────┐';
yield '│ $_qwer │';
yield '│ $_asdf │';
yield '│ $_zxcv │';
yield '└─────────────────────┘';
}