import 'package:flutter/material.dart'; import 'package:flutter_custom_toolbox/flutter_toolbox.dart'; import 'package:jeweled/config/default_game_settings.dart'; import 'package:jeweled/models/settings/settings_game.dart'; part 'settings_game_state.dart'; class GameSettingsCubit extends HydratedCubit<GameSettingsState> { GameSettingsCubit() : super(GameSettingsState(settings: GameSettings.createDefault())); void setValues({ String? boardSize, String? colorsCount, }) { emit( GameSettingsState( settings: GameSettings( boardSize: boardSize ?? state.settings.boardSize, colorsCount: colorsCount ?? state.settings.colorsCount, ), ), ); } String getParameterValue(String code) { switch (code) { case DefaultGameSettings.parameterCodeBoardSize: return GameSettings.getBoardSizeValueFromUnsafe(state.settings.boardSize); case DefaultGameSettings.parameterCodeColorsCount: return GameSettings.getColorsCountValueFromUnsafe(state.settings.colorsCount); } return ''; } void setParameterValue(String code, String value) { final String boardSize = code == DefaultGameSettings.parameterCodeBoardSize ? value : getParameterValue(DefaultGameSettings.parameterCodeBoardSize); final String colorsCount = code == DefaultGameSettings.parameterCodeColorsCount ? value : getParameterValue(DefaultGameSettings.parameterCodeColorsCount); setValues( boardSize: boardSize, colorsCount: colorsCount, ); } @override GameSettingsState? fromJson(Map<String, dynamic> json) { final String boardSize = json[DefaultGameSettings.parameterCodeBoardSize] as String; final String colorsCount = json[DefaultGameSettings.parameterCodeColorsCount] as String; return GameSettingsState( settings: GameSettings( boardSize: boardSize, colorsCount: colorsCount, ), ); } @override Map<String, dynamic>? toJson(GameSettingsState state) { return <String, dynamic>{ DefaultGameSettings.parameterCodeBoardSize: state.settings.boardSize, DefaultGameSettings.parameterCodeColorsCount: state.settings.colorsCount, }; } }