diff --git a/lib/src/feature/game/bloc/game_bloc.dart b/lib/src/feature/game/bloc/game_bloc.dart index c3a5ad8..71ae24b 100644 --- a/lib/src/feature/game/bloc/game_bloc.dart +++ b/lib/src/feature/game/bloc/game_bloc.dart @@ -1,6 +1,7 @@ import 'dart:async' show unawaited; import 'dart:ui' show Locale; +import 'package:bloc/bloc.dart'; import 'package:collection/collection.dart'; import 'package:flutter/services.dart' show KeyEvent, LogicalKeyboardKey; import 'package:flutter_bloc/flutter_bloc.dart'; @@ -15,87 +16,10 @@ import 'package:wordly/src/feature/level/data/level_repository.dart'; import 'package:wordly/src/feature/statistic/data/statistics_repository.dart'; part 'game_bloc.freezed.dart'; +part 'game_event.dart'; +part 'game_state.dart'; -@Freezed(copyWith: false) -sealed class GameEvent with _$GameEvent { - const factory GameEvent.changeDictionary(Locale dictionary) = _ChangeDictionaryGameEvent; - - const factory GameEvent.changeGameMode(GameMode gameMode) = _ChangeGameModeGameEvent; - - const factory GameEvent.resetBoard(GameMode gameMode) = _ResetBoardGameEvent; - - const factory GameEvent.letterPressed(String key) = _LetterPressedGameEvent; - - const factory GameEvent.deletePressed() = _DeletePressedGameEvent; - - const factory GameEvent.deleteLongPressed() = _DeleteLongPressedGameEvent; - - const factory GameEvent.enterPressed() = _EnterPressedGameEvent; - - const factory GameEvent.listenKeyEvent(KeyEvent keyEvent) = _ListenKeyEventGameEvent; -} - -@Freezed() -sealed class GameState with _$GameState { - const GameState._(); - - const factory GameState.idle({ - required Locale dictionary, - required String secretWord, - required GameMode gameMode, - required bool gameCompleted, - required List board, - required Map statuses, - required int? lvlNumber, - }) = _GameStateIdle; - - const factory GameState.win({ - required Locale dictionary, - required String secretWord, - required GameMode gameMode, - required bool gameCompleted, - required List board, - required Map statuses, - required int? lvlNumber, - }) = _GameStateWin; - - const factory GameState.loss({ - required Locale dictionary, - required String secretWord, - required GameMode gameMode, - required bool gameCompleted, - required List board, - required Map statuses, - required int? lvlNumber, - }) = _GameStateLoss; - - const factory GameState.error({ - required Locale dictionary, - required String secretWord, - required GameMode gameMode, - required bool gameCompleted, - required List board, - required Map statuses, - required WordError error, - required int? lvlNumber, - }) = _GameStateError; - - int get currentWordIndex => (board.length - 1) ~/ 5; - - bool get isResultState => maybeMap(win: (_) => true, loss: (_) => true, orElse: () => false); - - bool get isErrorState => maybeMap(error: (_) => true, orElse: () => false); - - (bool, int, List)? get buildResultString { - final result = mapOrNull(win: (_) => true, loss: (_) => false); - if (result == null) { - return null; - } - return (result, currentWordIndex + 1, board); - } -} - -class GameBloc extends Bloc { +final class GameBloc extends Bloc { GameBloc({ required Locale dictionary, required IGameRepository gameRepository, @@ -110,14 +34,14 @@ class GameBloc extends Bloc { ) { on( (event, emit) async => switch (event) { - final _ChangeDictionaryGameEvent e => _changeDictionary(e, emit), - final _ChangeGameModeGameEvent e => _changeGameMode(e, emit), - final _ResetBoardGameEvent e => _resetBoard(e, emit), - final _LetterPressedGameEvent e => _letterPressed(e, emit), - final _EnterPressedGameEvent e => _enterPressed(e, emit), - final _DeletePressedGameEvent e => _deletePressed(e, emit), - final _DeleteLongPressedGameEvent e => _deleteLongPressed(e, emit), - final _ListenKeyEventGameEvent e => _listenKeyEvent(e, emit), + final _GameChangeDictionary e => _changeDictionary(e, emit), + final _GameChangeGameMode e => _changeGameMode(e, emit), + final _GameResetBoard e => _resetBoard(e, emit), + final _GameLetterPressed e => _letterPressed(e, emit), + final _GameEnterPressed e => _enterPressed(e, emit), + final _GameDeletePressed e => _deletePressed(e, emit), + final _GameDeleteLongPressed e => _deleteLongPressed(e, emit), + final _GameListenKeyEvent e => _listenKeyEvent(e, emit), }, ); } @@ -126,7 +50,7 @@ class GameBloc extends Bloc { final IStatisticsRepository _statisticsRepository; final ILevelRepository _levelRepository; - void _listenKeyEvent(_ListenKeyEventGameEvent event, Emitter emit) { + void _listenKeyEvent(_GameListenKeyEvent event, Emitter emit) { final key = event.keyEvent; if (key.logicalKey == LogicalKeyboardKey.enter) { add(const GameEvent.enterPressed()); @@ -145,7 +69,7 @@ class GameBloc extends Bloc { } } - Future _changeDictionary(_ChangeDictionaryGameEvent event, Emitter emit) async { + Future _changeDictionary(_GameChangeDictionary event, Emitter emit) async { final newDictionary = event.dictionary; if (state.dictionary.languageCode == newDictionary.languageCode) { return; @@ -168,7 +92,7 @@ class GameBloc extends Bloc { emit(newState); } - Future _changeGameMode(_ChangeGameModeGameEvent event, Emitter emit) async { + Future _changeGameMode(_GameChangeGameMode event, Emitter emit) async { if (state.gameMode == event.gameMode) { return; } @@ -191,7 +115,7 @@ class GameBloc extends Bloc { emit(newState); } - void _resetBoard(_ResetBoardGameEvent event, Emitter emit) { + void _resetBoard(_GameResetBoard event, Emitter emit) { final GameResult? savedResult; if (event.gameMode == GameMode.daily) { savedResult = GameResult(secretWord: _gameRepository.generateSecretWord(state.dictionary), board: []); @@ -207,7 +131,7 @@ class GameBloc extends Bloc { emit(newState); } - void _letterPressed(_LetterPressedGameEvent event, Emitter emit) { + void _letterPressed(_GameLetterPressed event, Emitter emit) { if (state.gameCompleted) { return; } @@ -232,7 +156,7 @@ class GameBloc extends Bloc { ); } - void _deletePressed(_DeletePressedGameEvent event, Emitter emit) { + void _deletePressed(_GameDeletePressed event, Emitter emit) { if (state.gameCompleted) { return; } @@ -253,7 +177,7 @@ class GameBloc extends Bloc { ); } - void _deleteLongPressed(_DeleteLongPressedGameEvent event, Emitter emit) { + void _deleteLongPressed(_GameDeleteLongPressed event, Emitter emit) { if (state.gameCompleted) { return; } @@ -275,13 +199,13 @@ class GameBloc extends Bloc { ); } - void _enterPressed(_EnterPressedGameEvent event, Emitter emit) { + void _enterPressed(_GameEnterPressed event, Emitter emit) { if (state.gameCompleted) { return; } if (state.board.isEmpty || state.board.length % 5 != 0) { emit( - GameState.error( + GameState.failure( dictionary: state.dictionary, secretWord: state.secretWord, gameMode: state.gameMode, @@ -311,7 +235,7 @@ class GameBloc extends Bloc { .toList(growable: false); if (!_gameRepository.currentDictionary(state.dictionary).containsKey(word.join())) { emit( - GameState.error( + GameState.failure( dictionary: state.dictionary, secretWord: state.secretWord, gameMode: state.gameMode, diff --git a/lib/src/feature/game/bloc/game_bloc.freezed.dart b/lib/src/feature/game/bloc/game_bloc.freezed.dart index b2126e0..77c61f1 100644 --- a/lib/src/feature/game/bloc/game_bloc.freezed.dart +++ b/lib/src/feature/game/bloc/game_bloc.freezed.dart @@ -11,75 +11,34 @@ part of 'game_bloc.dart'; T _$identity(T value) => value; -final _privateConstructorUsedError = UnsupportedError( - 'It seems like you constructed your class using `MyClass._()`. This constructor is only meant to be used by freezed and you are not supposed to need it nor use it.\nPlease check the documentation here for more information: https://github.com/rrousselGit/freezed#adding-getters-and-methods-to-our-models', -); - /// @nodoc mixin _$GameEvent { - @optionalTypeArgs - TResult map({ - required TResult Function(_ChangeDictionaryGameEvent value) changeDictionary, - required TResult Function(_ChangeGameModeGameEvent value) changeGameMode, - required TResult Function(_ResetBoardGameEvent value) resetBoard, - required TResult Function(_LetterPressedGameEvent value) letterPressed, - required TResult Function(_DeletePressedGameEvent value) deletePressed, - required TResult Function(_DeleteLongPressedGameEvent value) deleteLongPressed, - required TResult Function(_EnterPressedGameEvent value) enterPressed, - required TResult Function(_ListenKeyEventGameEvent value) listenKeyEvent, - }) => throw _privateConstructorUsedError; - - @optionalTypeArgs - TResult? mapOrNull({ - TResult? Function(_ChangeDictionaryGameEvent value)? changeDictionary, - TResult? Function(_ChangeGameModeGameEvent value)? changeGameMode, - TResult? Function(_ResetBoardGameEvent value)? resetBoard, - TResult? Function(_LetterPressedGameEvent value)? letterPressed, - TResult? Function(_DeletePressedGameEvent value)? deletePressed, - TResult? Function(_DeleteLongPressedGameEvent value)? deleteLongPressed, - TResult? Function(_EnterPressedGameEvent value)? enterPressed, - TResult? Function(_ListenKeyEventGameEvent value)? listenKeyEvent, - }) => throw _privateConstructorUsedError; - @optionalTypeArgs - TResult maybeMap({ - TResult Function(_ChangeDictionaryGameEvent value)? changeDictionary, - - TResult Function(_ChangeGameModeGameEvent value)? changeGameMode, - - TResult Function(_ResetBoardGameEvent value)? resetBoard, - - TResult Function(_LetterPressedGameEvent value)? letterPressed, - - TResult Function(_DeletePressedGameEvent value)? deletePressed, - - TResult Function(_DeleteLongPressedGameEvent value)? deleteLongPressed, - - TResult Function(_EnterPressedGameEvent value)? enterPressed, - - TResult Function(_ListenKeyEventGameEvent value)? listenKeyEvent, - - required TResult orElse(), - }) => throw _privateConstructorUsedError; -} - -/// @nodoc - -class _$ChangeDictionaryGameEventImpl implements _ChangeDictionaryGameEvent { - const _$ChangeDictionaryGameEventImpl(this.dictionary); + @override + bool operator ==(Object other) { + return identical(this, other) || (other.runtimeType == runtimeType && other is GameEvent); + } @override - final Locale dictionary; + int get hashCode => runtimeType.hashCode; @override String toString() { - return 'GameEvent.changeDictionary(dictionary: $dictionary)'; + return 'GameEvent()'; } +} + +/// @nodoc + +class _GameChangeDictionary implements GameEvent { + const _GameChangeDictionary(this.dictionary); + + final Locale dictionary; @override bool operator ==(Object other) { return identical(this, other) || (other.runtimeType == runtimeType && - other is _$ChangeDictionaryGameEventImpl && + other is _GameChangeDictionary && (identical(other.dictionary, dictionary) || other.dictionary == dictionary)); } @@ -87,87 +46,23 @@ class _$ChangeDictionaryGameEventImpl implements _ChangeDictionaryGameEvent { int get hashCode => Object.hash(runtimeType, dictionary); @override - @optionalTypeArgs - TResult map({ - required TResult Function(_ChangeDictionaryGameEvent value) changeDictionary, - required TResult Function(_ChangeGameModeGameEvent value) changeGameMode, - required TResult Function(_ResetBoardGameEvent value) resetBoard, - required TResult Function(_LetterPressedGameEvent value) letterPressed, - required TResult Function(_DeletePressedGameEvent value) deletePressed, - required TResult Function(_DeleteLongPressedGameEvent value) deleteLongPressed, - required TResult Function(_EnterPressedGameEvent value) enterPressed, - required TResult Function(_ListenKeyEventGameEvent value) listenKeyEvent, - }) { - return changeDictionary(this); - } - - @override - @optionalTypeArgs - TResult? mapOrNull({ - TResult? Function(_ChangeDictionaryGameEvent value)? changeDictionary, - TResult? Function(_ChangeGameModeGameEvent value)? changeGameMode, - TResult? Function(_ResetBoardGameEvent value)? resetBoard, - TResult? Function(_LetterPressedGameEvent value)? letterPressed, - TResult? Function(_DeletePressedGameEvent value)? deletePressed, - TResult? Function(_DeleteLongPressedGameEvent value)? deleteLongPressed, - TResult? Function(_EnterPressedGameEvent value)? enterPressed, - TResult? Function(_ListenKeyEventGameEvent value)? listenKeyEvent, - }) { - return changeDictionary?.call(this); - } - - @override - @optionalTypeArgs - TResult maybeMap({ - TResult Function(_ChangeDictionaryGameEvent value)? changeDictionary, - - TResult Function(_ChangeGameModeGameEvent value)? changeGameMode, - - TResult Function(_ResetBoardGameEvent value)? resetBoard, - - TResult Function(_LetterPressedGameEvent value)? letterPressed, - - TResult Function(_DeletePressedGameEvent value)? deletePressed, - - TResult Function(_DeleteLongPressedGameEvent value)? deleteLongPressed, - - TResult Function(_EnterPressedGameEvent value)? enterPressed, - - TResult Function(_ListenKeyEventGameEvent value)? listenKeyEvent, - - required TResult orElse(), - }) { - if (changeDictionary != null) { - return changeDictionary(this); - } - return orElse(); + String toString() { + return 'GameEvent.changeDictionary(dictionary: $dictionary)'; } } -abstract class _ChangeDictionaryGameEvent implements GameEvent { - const factory _ChangeDictionaryGameEvent(final Locale dictionary) = _$ChangeDictionaryGameEventImpl; - - Locale get dictionary; -} - /// @nodoc -class _$ChangeGameModeGameEventImpl implements _ChangeGameModeGameEvent { - const _$ChangeGameModeGameEventImpl(this.gameMode); +class _GameChangeGameMode implements GameEvent { + const _GameChangeGameMode(this.gameMode); - @override final GameMode gameMode; - @override - String toString() { - return 'GameEvent.changeGameMode(gameMode: $gameMode)'; - } - @override bool operator ==(Object other) { return identical(this, other) || (other.runtimeType == runtimeType && - other is _$ChangeGameModeGameEventImpl && + other is _GameChangeGameMode && (identical(other.gameMode, gameMode) || other.gameMode == gameMode)); } @@ -175,87 +70,23 @@ class _$ChangeGameModeGameEventImpl implements _ChangeGameModeGameEvent { int get hashCode => Object.hash(runtimeType, gameMode); @override - @optionalTypeArgs - TResult map({ - required TResult Function(_ChangeDictionaryGameEvent value) changeDictionary, - required TResult Function(_ChangeGameModeGameEvent value) changeGameMode, - required TResult Function(_ResetBoardGameEvent value) resetBoard, - required TResult Function(_LetterPressedGameEvent value) letterPressed, - required TResult Function(_DeletePressedGameEvent value) deletePressed, - required TResult Function(_DeleteLongPressedGameEvent value) deleteLongPressed, - required TResult Function(_EnterPressedGameEvent value) enterPressed, - required TResult Function(_ListenKeyEventGameEvent value) listenKeyEvent, - }) { - return changeGameMode(this); - } - - @override - @optionalTypeArgs - TResult? mapOrNull({ - TResult? Function(_ChangeDictionaryGameEvent value)? changeDictionary, - TResult? Function(_ChangeGameModeGameEvent value)? changeGameMode, - TResult? Function(_ResetBoardGameEvent value)? resetBoard, - TResult? Function(_LetterPressedGameEvent value)? letterPressed, - TResult? Function(_DeletePressedGameEvent value)? deletePressed, - TResult? Function(_DeleteLongPressedGameEvent value)? deleteLongPressed, - TResult? Function(_EnterPressedGameEvent value)? enterPressed, - TResult? Function(_ListenKeyEventGameEvent value)? listenKeyEvent, - }) { - return changeGameMode?.call(this); - } - - @override - @optionalTypeArgs - TResult maybeMap({ - TResult Function(_ChangeDictionaryGameEvent value)? changeDictionary, - - TResult Function(_ChangeGameModeGameEvent value)? changeGameMode, - - TResult Function(_ResetBoardGameEvent value)? resetBoard, - - TResult Function(_LetterPressedGameEvent value)? letterPressed, - - TResult Function(_DeletePressedGameEvent value)? deletePressed, - - TResult Function(_DeleteLongPressedGameEvent value)? deleteLongPressed, - - TResult Function(_EnterPressedGameEvent value)? enterPressed, - - TResult Function(_ListenKeyEventGameEvent value)? listenKeyEvent, - - required TResult orElse(), - }) { - if (changeGameMode != null) { - return changeGameMode(this); - } - return orElse(); + String toString() { + return 'GameEvent.changeGameMode(gameMode: $gameMode)'; } } -abstract class _ChangeGameModeGameEvent implements GameEvent { - const factory _ChangeGameModeGameEvent(final GameMode gameMode) = _$ChangeGameModeGameEventImpl; - - GameMode get gameMode; -} - /// @nodoc -class _$ResetBoardGameEventImpl implements _ResetBoardGameEvent { - const _$ResetBoardGameEventImpl(this.gameMode); +class _GameResetBoard implements GameEvent { + const _GameResetBoard(this.gameMode); - @override final GameMode gameMode; - @override - String toString() { - return 'GameEvent.resetBoard(gameMode: $gameMode)'; - } - @override bool operator ==(Object other) { return identical(this, other) || (other.runtimeType == runtimeType && - other is _$ResetBoardGameEventImpl && + other is _GameResetBoard && (identical(other.gameMode, gameMode) || other.gameMode == gameMode)); } @@ -263,87 +94,23 @@ class _$ResetBoardGameEventImpl implements _ResetBoardGameEvent { int get hashCode => Object.hash(runtimeType, gameMode); @override - @optionalTypeArgs - TResult map({ - required TResult Function(_ChangeDictionaryGameEvent value) changeDictionary, - required TResult Function(_ChangeGameModeGameEvent value) changeGameMode, - required TResult Function(_ResetBoardGameEvent value) resetBoard, - required TResult Function(_LetterPressedGameEvent value) letterPressed, - required TResult Function(_DeletePressedGameEvent value) deletePressed, - required TResult Function(_DeleteLongPressedGameEvent value) deleteLongPressed, - required TResult Function(_EnterPressedGameEvent value) enterPressed, - required TResult Function(_ListenKeyEventGameEvent value) listenKeyEvent, - }) { - return resetBoard(this); - } - - @override - @optionalTypeArgs - TResult? mapOrNull({ - TResult? Function(_ChangeDictionaryGameEvent value)? changeDictionary, - TResult? Function(_ChangeGameModeGameEvent value)? changeGameMode, - TResult? Function(_ResetBoardGameEvent value)? resetBoard, - TResult? Function(_LetterPressedGameEvent value)? letterPressed, - TResult? Function(_DeletePressedGameEvent value)? deletePressed, - TResult? Function(_DeleteLongPressedGameEvent value)? deleteLongPressed, - TResult? Function(_EnterPressedGameEvent value)? enterPressed, - TResult? Function(_ListenKeyEventGameEvent value)? listenKeyEvent, - }) { - return resetBoard?.call(this); - } - - @override - @optionalTypeArgs - TResult maybeMap({ - TResult Function(_ChangeDictionaryGameEvent value)? changeDictionary, - - TResult Function(_ChangeGameModeGameEvent value)? changeGameMode, - - TResult Function(_ResetBoardGameEvent value)? resetBoard, - - TResult Function(_LetterPressedGameEvent value)? letterPressed, - - TResult Function(_DeletePressedGameEvent value)? deletePressed, - - TResult Function(_DeleteLongPressedGameEvent value)? deleteLongPressed, - - TResult Function(_EnterPressedGameEvent value)? enterPressed, - - TResult Function(_ListenKeyEventGameEvent value)? listenKeyEvent, - - required TResult orElse(), - }) { - if (resetBoard != null) { - return resetBoard(this); - } - return orElse(); + String toString() { + return 'GameEvent.resetBoard(gameMode: $gameMode)'; } } -abstract class _ResetBoardGameEvent implements GameEvent { - const factory _ResetBoardGameEvent(final GameMode gameMode) = _$ResetBoardGameEventImpl; - - GameMode get gameMode; -} - /// @nodoc -class _$LetterPressedGameEventImpl implements _LetterPressedGameEvent { - const _$LetterPressedGameEventImpl(this.key); +class _GameLetterPressed implements GameEvent { + const _GameLetterPressed(this.key); - @override final String key; - @override - String toString() { - return 'GameEvent.letterPressed(key: $key)'; - } - @override bool operator ==(Object other) { return identical(this, other) || (other.runtimeType == runtimeType && - other is _$LetterPressedGameEventImpl && + other is _GameLetterPressed && (identical(other.key, key) || other.key == key)); } @@ -351,327 +118,80 @@ class _$LetterPressedGameEventImpl implements _LetterPressedGameEvent { int get hashCode => Object.hash(runtimeType, key); @override - @optionalTypeArgs - TResult map({ - required TResult Function(_ChangeDictionaryGameEvent value) changeDictionary, - required TResult Function(_ChangeGameModeGameEvent value) changeGameMode, - required TResult Function(_ResetBoardGameEvent value) resetBoard, - required TResult Function(_LetterPressedGameEvent value) letterPressed, - required TResult Function(_DeletePressedGameEvent value) deletePressed, - required TResult Function(_DeleteLongPressedGameEvent value) deleteLongPressed, - required TResult Function(_EnterPressedGameEvent value) enterPressed, - required TResult Function(_ListenKeyEventGameEvent value) listenKeyEvent, - }) { - return letterPressed(this); - } - - @override - @optionalTypeArgs - TResult? mapOrNull({ - TResult? Function(_ChangeDictionaryGameEvent value)? changeDictionary, - TResult? Function(_ChangeGameModeGameEvent value)? changeGameMode, - TResult? Function(_ResetBoardGameEvent value)? resetBoard, - TResult? Function(_LetterPressedGameEvent value)? letterPressed, - TResult? Function(_DeletePressedGameEvent value)? deletePressed, - TResult? Function(_DeleteLongPressedGameEvent value)? deleteLongPressed, - TResult? Function(_EnterPressedGameEvent value)? enterPressed, - TResult? Function(_ListenKeyEventGameEvent value)? listenKeyEvent, - }) { - return letterPressed?.call(this); - } - - @override - @optionalTypeArgs - TResult maybeMap({ - TResult Function(_ChangeDictionaryGameEvent value)? changeDictionary, - - TResult Function(_ChangeGameModeGameEvent value)? changeGameMode, - - TResult Function(_ResetBoardGameEvent value)? resetBoard, - - TResult Function(_LetterPressedGameEvent value)? letterPressed, - - TResult Function(_DeletePressedGameEvent value)? deletePressed, - - TResult Function(_DeleteLongPressedGameEvent value)? deleteLongPressed, - - TResult Function(_EnterPressedGameEvent value)? enterPressed, - - TResult Function(_ListenKeyEventGameEvent value)? listenKeyEvent, - - required TResult orElse(), - }) { - if (letterPressed != null) { - return letterPressed(this); - } - return orElse(); + String toString() { + return 'GameEvent.letterPressed(key: $key)'; } } -abstract class _LetterPressedGameEvent implements GameEvent { - const factory _LetterPressedGameEvent(final String key) = _$LetterPressedGameEventImpl; - - String get key; -} - /// @nodoc -class _$DeletePressedGameEventImpl implements _DeletePressedGameEvent { - const _$DeletePressedGameEventImpl(); - - @override - String toString() { - return 'GameEvent.deletePressed()'; - } +class _GameDeletePressed implements GameEvent { + const _GameDeletePressed(); @override bool operator ==(Object other) { - return identical(this, other) || (other.runtimeType == runtimeType && other is _$DeletePressedGameEventImpl); + return identical(this, other) || (other.runtimeType == runtimeType && other is _GameDeletePressed); } @override int get hashCode => runtimeType.hashCode; @override - @optionalTypeArgs - TResult map({ - required TResult Function(_ChangeDictionaryGameEvent value) changeDictionary, - required TResult Function(_ChangeGameModeGameEvent value) changeGameMode, - required TResult Function(_ResetBoardGameEvent value) resetBoard, - required TResult Function(_LetterPressedGameEvent value) letterPressed, - required TResult Function(_DeletePressedGameEvent value) deletePressed, - required TResult Function(_DeleteLongPressedGameEvent value) deleteLongPressed, - required TResult Function(_EnterPressedGameEvent value) enterPressed, - required TResult Function(_ListenKeyEventGameEvent value) listenKeyEvent, - }) { - return deletePressed(this); - } - - @override - @optionalTypeArgs - TResult? mapOrNull({ - TResult? Function(_ChangeDictionaryGameEvent value)? changeDictionary, - TResult? Function(_ChangeGameModeGameEvent value)? changeGameMode, - TResult? Function(_ResetBoardGameEvent value)? resetBoard, - TResult? Function(_LetterPressedGameEvent value)? letterPressed, - TResult? Function(_DeletePressedGameEvent value)? deletePressed, - TResult? Function(_DeleteLongPressedGameEvent value)? deleteLongPressed, - TResult? Function(_EnterPressedGameEvent value)? enterPressed, - TResult? Function(_ListenKeyEventGameEvent value)? listenKeyEvent, - }) { - return deletePressed?.call(this); - } - - @override - @optionalTypeArgs - TResult maybeMap({ - TResult Function(_ChangeDictionaryGameEvent value)? changeDictionary, - - TResult Function(_ChangeGameModeGameEvent value)? changeGameMode, - - TResult Function(_ResetBoardGameEvent value)? resetBoard, - - TResult Function(_LetterPressedGameEvent value)? letterPressed, - - TResult Function(_DeletePressedGameEvent value)? deletePressed, - - TResult Function(_DeleteLongPressedGameEvent value)? deleteLongPressed, - - TResult Function(_EnterPressedGameEvent value)? enterPressed, - - TResult Function(_ListenKeyEventGameEvent value)? listenKeyEvent, - - required TResult orElse(), - }) { - if (deletePressed != null) { - return deletePressed(this); - } - return orElse(); + String toString() { + return 'GameEvent.deletePressed()'; } } -abstract class _DeletePressedGameEvent implements GameEvent { - const factory _DeletePressedGameEvent() = _$DeletePressedGameEventImpl; -} - /// @nodoc -class _$DeleteLongPressedGameEventImpl implements _DeleteLongPressedGameEvent { - const _$DeleteLongPressedGameEventImpl(); - - @override - String toString() { - return 'GameEvent.deleteLongPressed()'; - } +class _GameDeleteLongPressed implements GameEvent { + const _GameDeleteLongPressed(); @override bool operator ==(Object other) { - return identical(this, other) || (other.runtimeType == runtimeType && other is _$DeleteLongPressedGameEventImpl); + return identical(this, other) || (other.runtimeType == runtimeType && other is _GameDeleteLongPressed); } @override int get hashCode => runtimeType.hashCode; @override - @optionalTypeArgs - TResult map({ - required TResult Function(_ChangeDictionaryGameEvent value) changeDictionary, - required TResult Function(_ChangeGameModeGameEvent value) changeGameMode, - required TResult Function(_ResetBoardGameEvent value) resetBoard, - required TResult Function(_LetterPressedGameEvent value) letterPressed, - required TResult Function(_DeletePressedGameEvent value) deletePressed, - required TResult Function(_DeleteLongPressedGameEvent value) deleteLongPressed, - required TResult Function(_EnterPressedGameEvent value) enterPressed, - required TResult Function(_ListenKeyEventGameEvent value) listenKeyEvent, - }) { - return deleteLongPressed(this); - } - - @override - @optionalTypeArgs - TResult? mapOrNull({ - TResult? Function(_ChangeDictionaryGameEvent value)? changeDictionary, - TResult? Function(_ChangeGameModeGameEvent value)? changeGameMode, - TResult? Function(_ResetBoardGameEvent value)? resetBoard, - TResult? Function(_LetterPressedGameEvent value)? letterPressed, - TResult? Function(_DeletePressedGameEvent value)? deletePressed, - TResult? Function(_DeleteLongPressedGameEvent value)? deleteLongPressed, - TResult? Function(_EnterPressedGameEvent value)? enterPressed, - TResult? Function(_ListenKeyEventGameEvent value)? listenKeyEvent, - }) { - return deleteLongPressed?.call(this); - } - - @override - @optionalTypeArgs - TResult maybeMap({ - TResult Function(_ChangeDictionaryGameEvent value)? changeDictionary, - - TResult Function(_ChangeGameModeGameEvent value)? changeGameMode, - - TResult Function(_ResetBoardGameEvent value)? resetBoard, - - TResult Function(_LetterPressedGameEvent value)? letterPressed, - - TResult Function(_DeletePressedGameEvent value)? deletePressed, - - TResult Function(_DeleteLongPressedGameEvent value)? deleteLongPressed, - - TResult Function(_EnterPressedGameEvent value)? enterPressed, - - TResult Function(_ListenKeyEventGameEvent value)? listenKeyEvent, - - required TResult orElse(), - }) { - if (deleteLongPressed != null) { - return deleteLongPressed(this); - } - return orElse(); + String toString() { + return 'GameEvent.deleteLongPressed()'; } } -abstract class _DeleteLongPressedGameEvent implements GameEvent { - const factory _DeleteLongPressedGameEvent() = _$DeleteLongPressedGameEventImpl; -} - /// @nodoc -class _$EnterPressedGameEventImpl implements _EnterPressedGameEvent { - const _$EnterPressedGameEventImpl(); - - @override - String toString() { - return 'GameEvent.enterPressed()'; - } +class _GameEnterPressed implements GameEvent { + const _GameEnterPressed(); @override bool operator ==(Object other) { - return identical(this, other) || (other.runtimeType == runtimeType && other is _$EnterPressedGameEventImpl); + return identical(this, other) || (other.runtimeType == runtimeType && other is _GameEnterPressed); } @override int get hashCode => runtimeType.hashCode; @override - @optionalTypeArgs - TResult map({ - required TResult Function(_ChangeDictionaryGameEvent value) changeDictionary, - required TResult Function(_ChangeGameModeGameEvent value) changeGameMode, - required TResult Function(_ResetBoardGameEvent value) resetBoard, - required TResult Function(_LetterPressedGameEvent value) letterPressed, - required TResult Function(_DeletePressedGameEvent value) deletePressed, - required TResult Function(_DeleteLongPressedGameEvent value) deleteLongPressed, - required TResult Function(_EnterPressedGameEvent value) enterPressed, - required TResult Function(_ListenKeyEventGameEvent value) listenKeyEvent, - }) { - return enterPressed(this); - } - - @override - @optionalTypeArgs - TResult? mapOrNull({ - TResult? Function(_ChangeDictionaryGameEvent value)? changeDictionary, - TResult? Function(_ChangeGameModeGameEvent value)? changeGameMode, - TResult? Function(_ResetBoardGameEvent value)? resetBoard, - TResult? Function(_LetterPressedGameEvent value)? letterPressed, - TResult? Function(_DeletePressedGameEvent value)? deletePressed, - TResult? Function(_DeleteLongPressedGameEvent value)? deleteLongPressed, - TResult? Function(_EnterPressedGameEvent value)? enterPressed, - TResult? Function(_ListenKeyEventGameEvent value)? listenKeyEvent, - }) { - return enterPressed?.call(this); - } - - @override - @optionalTypeArgs - TResult maybeMap({ - TResult Function(_ChangeDictionaryGameEvent value)? changeDictionary, - - TResult Function(_ChangeGameModeGameEvent value)? changeGameMode, - - TResult Function(_ResetBoardGameEvent value)? resetBoard, - - TResult Function(_LetterPressedGameEvent value)? letterPressed, - - TResult Function(_DeletePressedGameEvent value)? deletePressed, - - TResult Function(_DeleteLongPressedGameEvent value)? deleteLongPressed, - - TResult Function(_EnterPressedGameEvent value)? enterPressed, - - TResult Function(_ListenKeyEventGameEvent value)? listenKeyEvent, - - required TResult orElse(), - }) { - if (enterPressed != null) { - return enterPressed(this); - } - return orElse(); + String toString() { + return 'GameEvent.enterPressed()'; } } -abstract class _EnterPressedGameEvent implements GameEvent { - const factory _EnterPressedGameEvent() = _$EnterPressedGameEventImpl; -} - /// @nodoc -class _$ListenKeyEventGameEventImpl implements _ListenKeyEventGameEvent { - const _$ListenKeyEventGameEventImpl(this.keyEvent); +class _GameListenKeyEvent implements GameEvent { + const _GameListenKeyEvent(this.keyEvent); - @override final KeyEvent keyEvent; - @override - String toString() { - return 'GameEvent.listenKeyEvent(keyEvent: $keyEvent)'; - } - @override bool operator ==(Object other) { return identical(this, other) || (other.runtimeType == runtimeType && - other is _$ListenKeyEventGameEventImpl && + other is _GameListenKeyEvent && (identical(other.keyEvent, keyEvent) || other.keyEvent == keyEvent)); } @@ -679,118 +199,63 @@ class _$ListenKeyEventGameEventImpl implements _ListenKeyEventGameEvent { int get hashCode => Object.hash(runtimeType, keyEvent); @override - @optionalTypeArgs - TResult map({ - required TResult Function(_ChangeDictionaryGameEvent value) changeDictionary, - required TResult Function(_ChangeGameModeGameEvent value) changeGameMode, - required TResult Function(_ResetBoardGameEvent value) resetBoard, - required TResult Function(_LetterPressedGameEvent value) letterPressed, - required TResult Function(_DeletePressedGameEvent value) deletePressed, - required TResult Function(_DeleteLongPressedGameEvent value) deleteLongPressed, - required TResult Function(_EnterPressedGameEvent value) enterPressed, - required TResult Function(_ListenKeyEventGameEvent value) listenKeyEvent, - }) { - return listenKeyEvent(this); - } - - @override - @optionalTypeArgs - TResult? mapOrNull({ - TResult? Function(_ChangeDictionaryGameEvent value)? changeDictionary, - TResult? Function(_ChangeGameModeGameEvent value)? changeGameMode, - TResult? Function(_ResetBoardGameEvent value)? resetBoard, - TResult? Function(_LetterPressedGameEvent value)? letterPressed, - TResult? Function(_DeletePressedGameEvent value)? deletePressed, - TResult? Function(_DeleteLongPressedGameEvent value)? deleteLongPressed, - TResult? Function(_EnterPressedGameEvent value)? enterPressed, - TResult? Function(_ListenKeyEventGameEvent value)? listenKeyEvent, - }) { - return listenKeyEvent?.call(this); - } - - @override - @optionalTypeArgs - TResult maybeMap({ - TResult Function(_ChangeDictionaryGameEvent value)? changeDictionary, - - TResult Function(_ChangeGameModeGameEvent value)? changeGameMode, - - TResult Function(_ResetBoardGameEvent value)? resetBoard, - - TResult Function(_LetterPressedGameEvent value)? letterPressed, - - TResult Function(_DeletePressedGameEvent value)? deletePressed, - - TResult Function(_DeleteLongPressedGameEvent value)? deleteLongPressed, - - TResult Function(_EnterPressedGameEvent value)? enterPressed, - - TResult Function(_ListenKeyEventGameEvent value)? listenKeyEvent, - - required TResult orElse(), - }) { - if (listenKeyEvent != null) { - return listenKeyEvent(this); - } - return orElse(); + String toString() { + return 'GameEvent.listenKeyEvent(keyEvent: $keyEvent)'; } } -abstract class _ListenKeyEventGameEvent implements GameEvent { - const factory _ListenKeyEventGameEvent(final KeyEvent keyEvent) = _$ListenKeyEventGameEventImpl; - - KeyEvent get keyEvent; -} - /// @nodoc mixin _$GameState { - Locale get dictionary => throw _privateConstructorUsedError; - - String get secretWord => throw _privateConstructorUsedError; - - GameMode get gameMode => throw _privateConstructorUsedError; - - bool get gameCompleted => throw _privateConstructorUsedError; + Locale get dictionary; - List get board => throw _privateConstructorUsedError; + String get secretWord; - Map get statuses => throw _privateConstructorUsedError; + GameMode get gameMode; - int? get lvlNumber => throw _privateConstructorUsedError; + bool get gameCompleted; - @optionalTypeArgs - TResult map({ - required TResult Function(_GameStateIdle value) idle, - required TResult Function(_GameStateWin value) win, - required TResult Function(_GameStateLoss value) loss, - required TResult Function(_GameStateError value) error, - }) => throw _privateConstructorUsedError; + List get board; - @optionalTypeArgs - TResult? mapOrNull({ - TResult? Function(_GameStateIdle value)? idle, - TResult? Function(_GameStateWin value)? win, - TResult? Function(_GameStateLoss value)? loss, - TResult? Function(_GameStateError value)? error, - }) => throw _privateConstructorUsedError; - @optionalTypeArgs - TResult maybeMap({ - TResult Function(_GameStateIdle value)? idle, + Map get statuses; - TResult Function(_GameStateWin value)? win, + int? get lvlNumber; - TResult Function(_GameStateLoss value)? loss, + @override + bool operator ==(Object other) { + return identical(this, other) || + (other.runtimeType == runtimeType && + other is GameState && + (identical(other.dictionary, dictionary) || other.dictionary == dictionary) && + (identical(other.secretWord, secretWord) || other.secretWord == secretWord) && + (identical(other.gameMode, gameMode) || other.gameMode == gameMode) && + (identical(other.gameCompleted, gameCompleted) || other.gameCompleted == gameCompleted) && + const DeepCollectionEquality().equals(other.board, board) && + const DeepCollectionEquality().equals(other.statuses, statuses) && + (identical(other.lvlNumber, lvlNumber) || other.lvlNumber == lvlNumber)); + } - TResult Function(_GameStateError value)? error, + @override + int get hashCode => Object.hash( + runtimeType, + dictionary, + secretWord, + gameMode, + gameCompleted, + const DeepCollectionEquality().hash(board), + const DeepCollectionEquality().hash(statuses), + lvlNumber, + ); - required TResult orElse(), - }) => throw _privateConstructorUsedError; + @override + String toString() { + return 'GameState(dictionary: $dictionary, secretWord: $secretWord, gameMode: $gameMode, gameCompleted: $gameCompleted, board: $board, statuses: $statuses, lvlNumber: $lvlNumber)'; + } } /// @nodoc -class _$GameStateIdleImpl extends _GameStateIdle { - const _$GameStateIdleImpl({ +class GameIdle extends GameState { + const GameIdle({ required this.dictionary, required this.secretWord, required this.gameMode, @@ -831,16 +296,11 @@ class _$GameStateIdleImpl extends _GameStateIdle { @override final int? lvlNumber; - @override - String toString() { - return 'GameState.idle(dictionary: $dictionary, secretWord: $secretWord, gameMode: $gameMode, gameCompleted: $gameCompleted, board: $board, statuses: $statuses, lvlNumber: $lvlNumber)'; - } - @override bool operator ==(Object other) { return identical(this, other) || (other.runtimeType == runtimeType && - other is _$GameStateIdleImpl && + other is GameIdle && (identical(other.dictionary, dictionary) || other.dictionary == dictionary) && (identical(other.secretWord, secretWord) || other.secretWord == secretWord) && (identical(other.gameMode, gameMode) || other.gameMode == gameMode) && @@ -863,86 +323,15 @@ class _$GameStateIdleImpl extends _GameStateIdle { ); @override - @optionalTypeArgs - TResult map({ - required TResult Function(_GameStateIdle value) idle, - required TResult Function(_GameStateWin value) win, - required TResult Function(_GameStateLoss value) loss, - required TResult Function(_GameStateError value) error, - }) { - return idle(this); - } - - @override - @optionalTypeArgs - TResult? mapOrNull({ - TResult? Function(_GameStateIdle value)? idle, - TResult? Function(_GameStateWin value)? win, - TResult? Function(_GameStateLoss value)? loss, - TResult? Function(_GameStateError value)? error, - }) { - return idle?.call(this); - } - - @override - @optionalTypeArgs - TResult maybeMap({ - TResult Function(_GameStateIdle value)? idle, - - TResult Function(_GameStateWin value)? win, - - TResult Function(_GameStateLoss value)? loss, - - TResult Function(_GameStateError value)? error, - - required TResult orElse(), - }) { - if (idle != null) { - return idle(this); - } - return orElse(); + String toString() { + return 'GameState.idle(dictionary: $dictionary, secretWord: $secretWord, gameMode: $gameMode, gameCompleted: $gameCompleted, board: $board, statuses: $statuses, lvlNumber: $lvlNumber)'; } } -abstract class _GameStateIdle extends GameState { - const factory _GameStateIdle({ - required final Locale dictionary, - required final String secretWord, - required final GameMode gameMode, - required final bool gameCompleted, - required final List board, - required final Map statuses, - required final int? lvlNumber, - }) = _$GameStateIdleImpl; - - const _GameStateIdle._() : super._(); - - @override - Locale get dictionary; - - @override - String get secretWord; - - @override - GameMode get gameMode; - - @override - bool get gameCompleted; - - @override - List get board; - - @override - Map get statuses; - - @override - int? get lvlNumber; -} - /// @nodoc -class _$GameStateWinImpl extends _GameStateWin { - const _$GameStateWinImpl({ +class GameLoss extends GameState { + const GameLoss({ required this.dictionary, required this.secretWord, required this.gameMode, @@ -983,16 +372,11 @@ class _$GameStateWinImpl extends _GameStateWin { @override final int? lvlNumber; - @override - String toString() { - return 'GameState.win(dictionary: $dictionary, secretWord: $secretWord, gameMode: $gameMode, gameCompleted: $gameCompleted, board: $board, statuses: $statuses, lvlNumber: $lvlNumber)'; - } - @override bool operator ==(Object other) { return identical(this, other) || (other.runtimeType == runtimeType && - other is _$GameStateWinImpl && + other is GameLoss && (identical(other.dictionary, dictionary) || other.dictionary == dictionary) && (identical(other.secretWord, secretWord) || other.secretWord == secretWord) && (identical(other.gameMode, gameMode) || other.gameMode == gameMode) && @@ -1015,86 +399,15 @@ class _$GameStateWinImpl extends _GameStateWin { ); @override - @optionalTypeArgs - TResult map({ - required TResult Function(_GameStateIdle value) idle, - required TResult Function(_GameStateWin value) win, - required TResult Function(_GameStateLoss value) loss, - required TResult Function(_GameStateError value) error, - }) { - return win(this); - } - - @override - @optionalTypeArgs - TResult? mapOrNull({ - TResult? Function(_GameStateIdle value)? idle, - TResult? Function(_GameStateWin value)? win, - TResult? Function(_GameStateLoss value)? loss, - TResult? Function(_GameStateError value)? error, - }) { - return win?.call(this); - } - - @override - @optionalTypeArgs - TResult maybeMap({ - TResult Function(_GameStateIdle value)? idle, - - TResult Function(_GameStateWin value)? win, - - TResult Function(_GameStateLoss value)? loss, - - TResult Function(_GameStateError value)? error, - - required TResult orElse(), - }) { - if (win != null) { - return win(this); - } - return orElse(); + String toString() { + return 'GameState.loss(dictionary: $dictionary, secretWord: $secretWord, gameMode: $gameMode, gameCompleted: $gameCompleted, board: $board, statuses: $statuses, lvlNumber: $lvlNumber)'; } } -abstract class _GameStateWin extends GameState { - const factory _GameStateWin({ - required final Locale dictionary, - required final String secretWord, - required final GameMode gameMode, - required final bool gameCompleted, - required final List board, - required final Map statuses, - required final int? lvlNumber, - }) = _$GameStateWinImpl; - - const _GameStateWin._() : super._(); - - @override - Locale get dictionary; - - @override - String get secretWord; - - @override - GameMode get gameMode; - - @override - bool get gameCompleted; - - @override - List get board; - - @override - Map get statuses; - - @override - int? get lvlNumber; -} - /// @nodoc -class _$GameStateLossImpl extends _GameStateLoss { - const _$GameStateLossImpl({ +class GameWin extends GameState { + const GameWin({ required this.dictionary, required this.secretWord, required this.gameMode, @@ -1135,16 +448,11 @@ class _$GameStateLossImpl extends _GameStateLoss { @override final int? lvlNumber; - @override - String toString() { - return 'GameState.loss(dictionary: $dictionary, secretWord: $secretWord, gameMode: $gameMode, gameCompleted: $gameCompleted, board: $board, statuses: $statuses, lvlNumber: $lvlNumber)'; - } - @override bool operator ==(Object other) { return identical(this, other) || (other.runtimeType == runtimeType && - other is _$GameStateLossImpl && + other is GameWin && (identical(other.dictionary, dictionary) || other.dictionary == dictionary) && (identical(other.secretWord, secretWord) || other.secretWord == secretWord) && (identical(other.gameMode, gameMode) || other.gameMode == gameMode) && @@ -1167,86 +475,15 @@ class _$GameStateLossImpl extends _GameStateLoss { ); @override - @optionalTypeArgs - TResult map({ - required TResult Function(_GameStateIdle value) idle, - required TResult Function(_GameStateWin value) win, - required TResult Function(_GameStateLoss value) loss, - required TResult Function(_GameStateError value) error, - }) { - return loss(this); - } - - @override - @optionalTypeArgs - TResult? mapOrNull({ - TResult? Function(_GameStateIdle value)? idle, - TResult? Function(_GameStateWin value)? win, - TResult? Function(_GameStateLoss value)? loss, - TResult? Function(_GameStateError value)? error, - }) { - return loss?.call(this); - } - - @override - @optionalTypeArgs - TResult maybeMap({ - TResult Function(_GameStateIdle value)? idle, - - TResult Function(_GameStateWin value)? win, - - TResult Function(_GameStateLoss value)? loss, - - TResult Function(_GameStateError value)? error, - - required TResult orElse(), - }) { - if (loss != null) { - return loss(this); - } - return orElse(); + String toString() { + return 'GameState.win(dictionary: $dictionary, secretWord: $secretWord, gameMode: $gameMode, gameCompleted: $gameCompleted, board: $board, statuses: $statuses, lvlNumber: $lvlNumber)'; } } -abstract class _GameStateLoss extends GameState { - const factory _GameStateLoss({ - required final Locale dictionary, - required final String secretWord, - required final GameMode gameMode, - required final bool gameCompleted, - required final List board, - required final Map statuses, - required final int? lvlNumber, - }) = _$GameStateLossImpl; - - const _GameStateLoss._() : super._(); - - @override - Locale get dictionary; - - @override - String get secretWord; - - @override - GameMode get gameMode; - - @override - bool get gameCompleted; - - @override - List get board; - - @override - Map get statuses; - - @override - int? get lvlNumber; -} - /// @nodoc -class _$GameStateErrorImpl extends _GameStateError { - const _$GameStateErrorImpl({ +class GameFailure extends GameState { + const GameFailure({ required this.dictionary, required this.secretWord, required this.gameMode, @@ -1285,21 +522,15 @@ class _$GameStateErrorImpl extends _GameStateError { return EqualUnmodifiableMapView(_statuses); } - @override final WordError error; @override final int? lvlNumber; - @override - String toString() { - return 'GameState.error(dictionary: $dictionary, secretWord: $secretWord, gameMode: $gameMode, gameCompleted: $gameCompleted, board: $board, statuses: $statuses, error: $error, lvlNumber: $lvlNumber)'; - } - @override bool operator ==(Object other) { return identical(this, other) || (other.runtimeType == runtimeType && - other is _$GameStateErrorImpl && + other is GameFailure && (identical(other.dictionary, dictionary) || other.dictionary == dictionary) && (identical(other.secretWord, secretWord) || other.secretWord == secretWord) && (identical(other.gameMode, gameMode) || other.gameMode == gameMode) && @@ -1324,81 +555,7 @@ class _$GameStateErrorImpl extends _GameStateError { ); @override - @optionalTypeArgs - TResult map({ - required TResult Function(_GameStateIdle value) idle, - required TResult Function(_GameStateWin value) win, - required TResult Function(_GameStateLoss value) loss, - required TResult Function(_GameStateError value) error, - }) { - return error(this); - } - - @override - @optionalTypeArgs - TResult? mapOrNull({ - TResult? Function(_GameStateIdle value)? idle, - TResult? Function(_GameStateWin value)? win, - TResult? Function(_GameStateLoss value)? loss, - TResult? Function(_GameStateError value)? error, - }) { - return error?.call(this); - } - - @override - @optionalTypeArgs - TResult maybeMap({ - TResult Function(_GameStateIdle value)? idle, - - TResult Function(_GameStateWin value)? win, - - TResult Function(_GameStateLoss value)? loss, - - TResult Function(_GameStateError value)? error, - - required TResult orElse(), - }) { - if (error != null) { - return error(this); - } - return orElse(); + String toString() { + return 'GameState.failure(dictionary: $dictionary, secretWord: $secretWord, gameMode: $gameMode, gameCompleted: $gameCompleted, board: $board, statuses: $statuses, error: $error, lvlNumber: $lvlNumber)'; } } - -abstract class _GameStateError extends GameState { - const factory _GameStateError({ - required final Locale dictionary, - required final String secretWord, - required final GameMode gameMode, - required final bool gameCompleted, - required final List board, - required final Map statuses, - required final WordError error, - required final int? lvlNumber, - }) = _$GameStateErrorImpl; - - const _GameStateError._() : super._(); - - @override - Locale get dictionary; - - @override - String get secretWord; - - @override - GameMode get gameMode; - - @override - bool get gameCompleted; - - @override - List get board; - - @override - Map get statuses; - - WordError get error; - - @override - int? get lvlNumber; -} diff --git a/lib/src/feature/game/bloc/game_event.dart b/lib/src/feature/game/bloc/game_event.dart new file mode 100644 index 0000000..47d88b8 --- /dev/null +++ b/lib/src/feature/game/bloc/game_event.dart @@ -0,0 +1,20 @@ +part of 'game_bloc.dart'; + +@Freezed(copyWith: false) +sealed class GameEvent with _$GameEvent { + const factory GameEvent.changeDictionary(Locale dictionary) = _GameChangeDictionary; + + const factory GameEvent.changeGameMode(GameMode gameMode) = _GameChangeGameMode; + + const factory GameEvent.resetBoard(GameMode gameMode) = _GameResetBoard; + + const factory GameEvent.letterPressed(String key) = _GameLetterPressed; + + const factory GameEvent.deletePressed() = _GameDeletePressed; + + const factory GameEvent.deleteLongPressed() = _GameDeleteLongPressed; + + const factory GameEvent.enterPressed() = _GameEnterPressed; + + const factory GameEvent.listenKeyEvent(KeyEvent keyEvent) = _GameListenKeyEvent; +} diff --git a/lib/src/feature/game/bloc/game_state.dart b/lib/src/feature/game/bloc/game_state.dart new file mode 100644 index 0000000..f3d7f03 --- /dev/null +++ b/lib/src/feature/game/bloc/game_state.dart @@ -0,0 +1,67 @@ +part of 'game_bloc.dart'; + +@Freezed() +sealed class GameState with _$GameState { + const GameState._(); + + const factory GameState.idle({ + required Locale dictionary, + required String secretWord, + required GameMode gameMode, + required bool gameCompleted, + required List board, + required Map statuses, + required int? lvlNumber, + }) = GameIdle; + + const factory GameState.loss({ + required Locale dictionary, + required String secretWord, + required GameMode gameMode, + required bool gameCompleted, + required List board, + required Map statuses, + required int? lvlNumber, + }) = GameLoss; + + const factory GameState.win({ + required Locale dictionary, + required String secretWord, + required GameMode gameMode, + required bool gameCompleted, + required List board, + required Map statuses, + required int? lvlNumber, + }) = GameWin; + + const factory GameState.failure({ + required Locale dictionary, + required String secretWord, + required GameMode gameMode, + required bool gameCompleted, + required List board, + required Map statuses, + required WordError error, + required int? lvlNumber, + }) = GameFailure; + + int get currentWordIndex => (board.length - 1) ~/ 5; + + bool get isResult => this is GameWin || this is GameLoss; + + bool get isWin => this is GameWin; + + bool get isFailure => this is GameFailure; + + (bool, int, List)? get buildResultString { + final result = switch (this) { + final GameWin _ => true, + final GameLoss _ => true, + _ => null, + }; + if (result == null) { + return null; + } + return (result, currentWordIndex + 1, board); + } +} diff --git a/lib/src/feature/game/widget/game_page.dart b/lib/src/feature/game/widget/game_page.dart index e3f5830..5e633b7 100644 --- a/lib/src/feature/game/widget/game_page.dart +++ b/lib/src/feature/game/widget/game_page.dart @@ -10,6 +10,7 @@ import 'package:wordly/src/feature/components/widget/drawer.dart'; import 'package:wordly/src/feature/game/bloc/game_bloc.dart'; import 'package:wordly/src/feature/game/model/game_mode.dart'; import 'package:wordly/src/feature/game/model/letter_info.dart'; +import 'package:wordly/src/feature/game/model/word_error.dart'; import 'package:wordly/src/feature/game/widget/game_result_dialog.dart'; import 'package:wordly/src/feature/game/widget/keyboard_by_language.dart'; import 'package:wordly/src/feature/game/widget/words_grid.dart'; @@ -37,14 +38,14 @@ class _GamePageState extends State { final gameRepository = context.dependencies.gameRepository; final bloc = context.read(); final state = bloc.state; - if (state.isResultState) { + if (state.isResult) { unawaited( showGameResultDialog( context, state.secretWord, context.dependencies.gameRepository.currentDictionary(state.dictionary)[state.secretWord] ?? '', state.gameMode, - isWin: state.maybeMap(win: (_) => true, orElse: () => false), + isWin: state.isWin, onTimerEnd: GameMode.daily == state.gameMode ? () => bloc.add(GameEvent.resetBoard(state.gameMode)) : null, shareString: shareString(context, state.buildResultString), nextLevelPressed: () => bloc.add(const GameEvent.resetBoard(GameMode.lvl)), @@ -152,10 +153,10 @@ class GameBody extends StatelessWidget { (previous.gameCompleted != current.gameCompleted && previous.gameMode == current.gameMode && previous.dictionary == current.dictionary && - current.isResultState) || - current.isErrorState, + current.isResult) || + current.isFailure, listener: (context, state) { - if (state.isResultState) { + if (state.isResult) { final bloc = context.read(); unawaited( showGameResultDialog( @@ -163,7 +164,7 @@ class GameBody extends StatelessWidget { state.secretWord, context.dependencies.gameRepository.currentDictionary(state.dictionary)[state.secretWord] ?? '', state.gameMode, - isWin: state.maybeMap(win: (_) => true, orElse: () => false), + isWin: state.isWin, onTimerEnd: GameMode.daily == state.gameMode ? () { @@ -180,8 +181,11 @@ class GameBody extends StatelessWidget { ); return; } - if (state.isErrorState) { - final error = state.mapOrNull(error: (s) => s.error); + if (state.isFailure) { + WordError? error; + if (state case final GameFailure e) { + error = e.error; + } ScaffoldMessenger.of(context).showSnackBar( SnackBar( backgroundColor: LetterStatus.unknown.cellColor(context), diff --git a/pubspec.lock b/pubspec.lock index 72ce0aa..d58874b 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -21,10 +21,10 @@ packages: dependency: transitive description: name: archive - sha256: "6199c74e3db4fbfbd04f66d739e72fe11c8a8957d5f219f1f4482dbde6420b5a" + sha256: "528579c7e4579719f04b21eeeeddfd73a18b31dabc22766893b7d1be7f49b967" url: "https://pub.dev" source: hosted - version: "4.0.2" + version: "4.0.3" args: dependency: transitive description: @@ -221,10 +221,10 @@ packages: dependency: transitive description: name: ffi - sha256: "16ed7b077ef01ad6170a3d0c57caa4a112a38d7a2ed5602e0aca9ca6f3d98da6" + sha256: "289279317b4b16eb2bb7e271abccd4bf84ec9bdcbe999e278a94b804f5630418" url: "https://pub.dev" source: hosted - version: "2.1.3" + version: "2.1.4" file: dependency: transitive description: @@ -292,18 +292,18 @@ packages: dependency: "direct dev" description: name: freezed - sha256: "59a584c24b3acdc5250bb856d0d3e9c0b798ed14a4af1ddb7dc1c7b41df91c9c" + sha256: d2581edbd572e6e7c50eac5a9b91022a26200e08a7f5a82dcf70f070c0e2cb67 url: "https://pub.dev" source: hosted - version: "2.5.8" + version: "3.0.0" freezed_annotation: dependency: "direct main" description: name: freezed_annotation - sha256: c2e2d632dd9b8a2b7751117abcfc2b4888ecfe181bd9fca7170d9ef02e595fe2 + sha256: c87ff004c8aa6af2d531668b46a4ea379f7191dc6dfa066acd53d506da6e044b url: "https://pub.dev" source: hosted - version: "2.4.4" + version: "3.0.0" frontend_server_client: dependency: transitive description: @@ -372,10 +372,10 @@ packages: dependency: "direct main" description: name: intl - sha256: d6f56758b7d3014a48af9701c085700aac781a92a87a62b1333b46d8879661cf + sha256: "3df61194eb431efc39c4ceba583b95633a403f46c9fd341e550ce0bfa50e9aa5" url: "https://pub.dev" source: hosted - version: "0.19.0" + version: "0.20.2" io: dependency: transitive description: @@ -460,18 +460,18 @@ packages: dependency: "direct main" description: name: package_info_plus - sha256: "67eae327b1b0faf761964a1d2e5d323c797f3799db0e85aa232db8d9e922bc35" + sha256: "7976bfe4c583170d6cdc7077e3237560b364149fcd268b5f53d95a991963b191" url: "https://pub.dev" source: hosted - version: "8.2.1" + version: "8.3.0" package_info_plus_platform_interface: dependency: transitive description: name: package_info_plus_platform_interface - sha256: "205ec83335c2ab9107bbba3f8997f9356d72ca3c715d2f038fc773d0366b4c76" + sha256: "6c935fb612dff8e3cc9632c2b301720c77450a126114126ffaafe28d2e87956c" url: "https://pub.dev" source: hosted - version: "3.1.0" + version: "3.2.0" path: dependency: "direct main" description: @@ -636,10 +636,10 @@ packages: dependency: transitive description: name: shared_preferences_android - sha256: ea86be7b7114f9e94fddfbb52649e59a03d6627ccd2387ebddcd6624719e9f16 + sha256: a768fc8ede5f0c8e6150476e14f38e2417c0864ca36bb4582be8e21925a03c22 url: "https://pub.dev" source: hosted - version: "2.4.5" + version: "2.4.6" shared_preferences_foundation: dependency: transitive description: @@ -668,10 +668,10 @@ packages: dependency: transitive description: name: shared_preferences_web - sha256: d2ca4132d3946fec2184261726b355836a82c33d7d5b67af32692aff18a4684e + sha256: c49bd060261c9a3f0ff445892695d6212ff603ef3115edbb448509d407600019 url: "https://pub.dev" source: hosted - version: "2.4.2" + version: "2.4.3" shared_preferences_windows: dependency: transitive description: @@ -929,10 +929,10 @@ packages: dependency: transitive description: name: win32 - sha256: daf97c9d80197ed7b619040e86c8ab9a9dad285e7671ee7390f9180cc828a51e + sha256: b89e6e24d1454e149ab20fbb225af58660f0c0bf4475544650700d8e2da54aef url: "https://pub.dev" source: hosted - version: "5.10.1" + version: "5.11.0" xdg_directories: dependency: transitive description: diff --git a/pubspec.yaml b/pubspec.yaml index cc31518..34310a9 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -1,7 +1,7 @@ name: wordly description: Guess the WORD in six tries publish_to: none -version: 3.2.3+45 +version: 3.2.4+47 environment: sdk: '>=3.7.0 <4.0.0' flutter: '>=3.29.0' @@ -16,10 +16,10 @@ dependencies: flutter_colorpicker: ^1.1.0 flutter_localizations: sdk: flutter - freezed_annotation: ^2.4.4 + freezed_annotation: ^3.0.0 intl: any meta: any - package_info_plus: ^8.2.1 + package_info_plus: ^8.3.0 path: any rxdart: ^0.28.0 share_plus: ^10.1.4 @@ -32,8 +32,11 @@ dev_dependencies: carapacik_lints: ^1.11.1 flutter_gen_runner: ^5.9.0 #flutter_launcher_icons: ^0.14.3 - #flutter_native_splash: ^2.4.4 - freezed: ^2.5.8 + #flutter_native_splash: ^2.4.5 + freezed: ^3.0.0 + +dependency_overrides: + intl: ^0.20.2 flutter: uses-material-design: true