Skip to content
Snippets Groups Projects
settings_activity_cubit.dart 2.31 KiB
Newer Older
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,
    };
  }
}