Skip to content
Snippets Groups Projects
application_config.dart 7.26 KiB
Newer Older
Benoît Harrault's avatar
Benoît Harrault committed
import 'package:flutter/material.dart';
import 'package:flutter_custom_toolbox/flutter_toolbox.dart';

import 'package:suguru/cubit/activity/activity_cubit.dart';

import 'package:suguru/ui/pages/game.dart';

import 'package:suguru/ui/parameters/parameter_painter_board_size.dart';
Benoît Harrault's avatar
Benoît Harrault committed
import 'package:suguru/ui/parameters/parameter_painter_color_theme.dart';
Benoît Harrault's avatar
Benoît Harrault committed
import 'package:suguru/ui/parameters/parameter_painter_difficulty_level.dart';

class ApplicationConfig {
  // activity parameter: difficulty level
  static const String parameterCodeDifficultyLevel = 'activity.difficultyLevel';
  static const String difficultyLevelValueEasy = 'easy';
  static const String difficultyLevelValueMedium = 'medium';
  static const String difficultyLevelValueHard = 'hard';

  // activity parameter: board size
  static const String parameterCodeBoardSize = 'activity.boardSize';
  static const String boardSizeValueSmall = 'small';
  static const String boardSizeValueMedium = 'medium';
  static const String boardSizeValueLarge = 'large';

  // activity parameter: skin
  static const String parameterCodeSkin = 'global.skin';
  static const String skinValueDigits = 'digits';

Benoît Harrault's avatar
Benoît Harrault committed
  // activity parameter: colors theme values
  static const String parameterCodeColorTheme = 'global.colorTheme';
  static const String colorThemeLegacy = 'legacy';
  static const String colorThemeWeb = 'web';
  static const String colorThemeSweethope = 'sweethope';
  static const String colorThemeNostalgicDreams = 'nostalgic-dreams';
  static const String colorThemeArjibi8 = 'arjibi8';

Benoît Harrault's avatar
Benoît Harrault committed
  static const int defaultTipCountDownValueInSeconds = 20;

  // activity pages
  static const int activityPageIndexHome = 0;
  static const int activityPageIndexGame = 1;

  static final ApplicationConfigDefinition config = ApplicationConfigDefinition(
    appTitle: 'Suguru',
    activitySettings: [
      // difficulty level
      ApplicationSettingsParameter(
        code: parameterCodeDifficultyLevel,
        values: [
          ApplicationSettingsParameterItemValue(
            value: difficultyLevelValueEasy,
            color: Colors.green,
          ),
          ApplicationSettingsParameterItemValue(
            value: difficultyLevelValueMedium,
            color: Colors.orange,
            isDefault: true,
          ),
          ApplicationSettingsParameterItemValue(
            value: difficultyLevelValueHard,
            color: Colors.red,
          ),
        ],
        customPainter: (context, value) => ParameterPainterDifficultyLevel(
          context: context,
          value: value,
        ),
      ),

      // board size
      ApplicationSettingsParameter(
        code: parameterCodeBoardSize,
        values: [
          ApplicationSettingsParameterItemValue(
            value: boardSizeValueSmall,
            color: Colors.green,
          ),
          ApplicationSettingsParameterItemValue(
            value: boardSizeValueMedium,
            color: Colors.orange,
          ),
          ApplicationSettingsParameterItemValue(
            value: boardSizeValueLarge,
            color: Colors.red,
            isDefault: true,
          ),
        ],
        customPainter: (context, value) => ParameterPainterBoardSize(
          context: context,
          value: value,
        ),
      ),

      // skin
      ApplicationSettingsParameter(
        code: parameterCodeSkin,
        values: [
          ApplicationSettingsParameterItemValue(
            value: skinValueDigits,
            isDefault: true,
          ),
        ],
        builder: ({
          required context,
          required itemValue,
          required onPressed,
          required size,
        }) =>
            StyledButton(
          color: Colors.green.shade800,
          onPressed: onPressed,
          child: Image(
            image: AssetImage('assets/ui/skin_${itemValue.value}.png'),
            fit: BoxFit.fill,
          ),
        ),
      ),
Benoît Harrault's avatar
Benoît Harrault committed

      // colors theme
      ApplicationSettingsParameter(
        code: parameterCodeColorTheme,
        displayedOnTop: false,
        values: [
          ApplicationSettingsParameterItemValue(
            value: colorThemeWeb,
            isDefault: true,
          ),
          ApplicationSettingsParameterItemValue(
            value: colorThemeLegacy,
          ),
          ApplicationSettingsParameterItemValue(
            value: colorThemeSweethope,
          ),
          ApplicationSettingsParameterItemValue(
            value: colorThemeNostalgicDreams,
          ),
          ApplicationSettingsParameterItemValue(
            value: colorThemeArjibi8,
          ),
        ],
        customPainter: (context, value) {
          return ParameterPainterColorTheme(value: value, context: context);
        },
      ),
Benoît Harrault's avatar
Benoît Harrault committed
    ],
    startNewActivity: (BuildContext context) {
      BlocProvider.of<ActivityCubit>(context).startNewActivity(context);
      BlocProvider.of<NavCubitPage>(context)
          .updateIndex(ApplicationConfig.activityPageIndexGame);
    },
    quitCurrentActivity: (BuildContext context) {
      BlocProvider.of<ActivityCubit>(context).quitActivity();
      BlocProvider.of<NavCubitPage>(context)
          .updateIndex(ApplicationConfig.activityPageIndexHome);
    },
    deleteCurrentActivity: (BuildContext context) {
      BlocProvider.of<ActivityCubit>(context).deleteSavedActivity();
    },
    resumeActivity: (BuildContext context) {
      BlocProvider.of<ActivityCubit>(context).resumeSavedActivity();
      BlocProvider.of<NavCubitPage>(context)
          .updateIndex(ApplicationConfig.activityPageIndexGame);
    },
    navigation: ApplicationNavigation(
      screenActivity: ScreenItem(
        code: 'screen_activity',
        icon: Icon(UniconsLine.home),
        screen: ({required ApplicationConfigDefinition appConfig}) =>
            ScreenActivity(appConfig: appConfig),
      ),
      screenSettings: ScreenItem(
        code: 'screen_settings',
        icon: Icon(UniconsLine.setting),
        screen: ({required ApplicationConfigDefinition appConfig}) => ScreenSettings(),
      ),
      screenAbout: ScreenItem(
        code: 'screen_about',
        icon: Icon(UniconsLine.info_circle),
        screen: ({required ApplicationConfigDefinition appConfig}) => ScreenAbout(),
      ),
      appBarConfiguration: AppBarConfiguration(
        hideApplicationTitle: true,
        pushQuitActivityButtonLeft: true,
      ),
      activityPages: {
        activityPageIndexHome: ActivityPageItem(
          code: 'page_home',
          icon: Icon(UniconsLine.home),
          builder: ({required ApplicationConfigDefinition appConfig}) {
            return BlocBuilder<ActivityCubit, ActivityState>(
              builder: (BuildContext context, ActivityState activityState) {
                return PageParameters(
                  appConfig: appConfig,
                  canBeResumed: activityState.currentActivity.canBeResumed,
                );
              },
            );
          },
        ),
        activityPageIndexGame: ActivityPageItem(
          code: 'page_game',
          icon: Icon(UniconsLine.star),
          builder: ({required ApplicationConfigDefinition appConfig}) {
            return BlocBuilder<ActivityCubit, ActivityState>(
              builder: (BuildContext context, ActivityState activityState) {
                return PageGame();
              },
            );
          },
        ),
      },
    ),
  );
}