import 'package:flutter/material.dart'; import 'package:flutter_custom_toolbox/flutter_toolbox.dart'; import 'package:reversi/config/default_activity_settings.dart'; import 'package:reversi/models/settings/settings_activity.dart'; part 'settings_activity_state.dart'; class ActivitySettingsCubit extends HydratedCubit<ActivitySettingsState> { ActivitySettingsCubit() : super(ActivitySettingsState(settings: ActivitySettings.createDefault())); void setValues({ String? itemsCount, String? timerValue, }) { emit( ActivitySettingsState( settings: ActivitySettings( itemsCount: itemsCount ?? state.settings.itemsCount, timerValue: timerValue ?? state.settings.timerValue, ), ), ); } String getParameterValue(String code) { switch (code) { case DefaultActivitySettings.parameterCodeGameMode: return ActivitySettings.getItemsCountValueFromUnsafe(state.settings.itemsCount); case DefaultActivitySettings.parameterCodeDifficultyLevel: return ActivitySettings.getTimerValueFromUnsafe(state.settings.timerValue); } return ''; } void setParameterValue(String code, String value) { final String itemsCount = code == DefaultActivitySettings.parameterCodeGameMode ? value : getParameterValue(DefaultActivitySettings.parameterCodeGameMode); final String timerValue = code == DefaultActivitySettings.parameterCodeDifficultyLevel ? value : getParameterValue(DefaultActivitySettings.parameterCodeDifficultyLevel); setValues( itemsCount: itemsCount, timerValue: timerValue, ); } @override ActivitySettingsState? fromJson(Map<String, dynamic> json) { final String itemsCount = json[DefaultActivitySettings.parameterCodeGameMode] as String; final String timerValue = json[DefaultActivitySettings.parameterCodeDifficultyLevel] as String; return ActivitySettingsState( settings: ActivitySettings( itemsCount: itemsCount, timerValue: timerValue, ), ); } @override Map<String, dynamic>? toJson(ActivitySettingsState state) { return <String, dynamic>{ DefaultActivitySettings.parameterCodeGameMode: state.settings.itemsCount, DefaultActivitySettings.parameterCodeDifficultyLevel: state.settings.timerValue, }; } }