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'; import 'package:suguru/ui/parameters/parameter_painter_color_theme.dart'; 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'; // 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'; 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, ), ), ), // 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); }, ), ], 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(); }, ); }, ), }, ), ); }