diff --git a/fastlane/metadata/android/en-US/changelogs/51.txt b/fastlane/metadata/android/en-US/changelogs/51.txt new file mode 100644 index 0000000000000000000000000000000000000000..c20ed39173f1690cb6181457fe5d4c6cc0a061ab --- /dev/null +++ b/fastlane/metadata/android/en-US/changelogs/51.txt @@ -0,0 +1 @@ +Use ActivityParameters widgets from flutter_custom_toolbox. diff --git a/fastlane/metadata/android/fr-FR/changelogs/51.txt b/fastlane/metadata/android/fr-FR/changelogs/51.txt new file mode 100644 index 0000000000000000000000000000000000000000..f732ebd3738d66fdff72e28b0cf0bb4b0684e030 --- /dev/null +++ b/fastlane/metadata/android/fr-FR/changelogs/51.txt @@ -0,0 +1 @@ +Utilisation des widgets ActivityParameters de flutter_custom_toolbox. diff --git a/flutter_01.png b/flutter_01.png new file mode 100644 index 0000000000000000000000000000000000000000..0573bad1317844834df79f943667c85027a14870 Binary files /dev/null and b/flutter_01.png differ diff --git a/lib/common/config/activity_page.dart b/lib/common/config/activity_page.dart index 9c1b03a3c0213f53aecf134d537774be8de04fcc..0fe05cb33a5f008728ccf35d35021c9eac684179 100644 --- a/lib/common/config/activity_page.dart +++ b/lib/common/config/activity_page.dart @@ -1,18 +1,20 @@ import 'package:flutter/material.dart'; import 'package:flutter_custom_toolbox/flutter_toolbox.dart'; -import 'package:colors/common/ui/pages/game.dart'; -import 'package:colors/common/ui/pages/parameters.dart'; +import 'package:colors/cubit/activity/activity_cubit.dart'; +import 'package:colors/config/application_config.dart'; +import 'package:colors/models/activity/activity.dart'; +import 'package:colors/ui/pages/game.dart'; class ActivityPageItem { final String code; final Icon icon; - final Widget page; + final Widget Function({required Activity currentActivity})? builder; const ActivityPageItem({ required this.code, required this.icon, - required this.page, + required this.builder, }); } @@ -20,20 +22,27 @@ class ActivityPage { static const bool displayBottomNavBar = false; static const indexHome = 0; - static const pageHome = ActivityPageItem( + static final ActivityPageItem pageHome = ActivityPageItem( code: 'page_home', icon: Icon(UniconsLine.home), - page: PageParameters(), + builder: ({required Activity currentActivity}) { + return PageParameters( + config: ApplicationConfig.config, + canBeResumed: currentActivity.canBeResumed, + ); + }, ); static const indexGame = 1; - static const pageGame = ActivityPageItem( + static final pageGame = ActivityPageItem( code: 'page_game', icon: Icon(UniconsLine.star), - page: PageGame(), + builder: ({required Activity currentActivity}) { + return PageGame(); + }, ); - static const Map<int, ActivityPageItem> items = { + static final Map<int, ActivityPageItem> items = { indexHome: pageHome, indexGame: pageGame, }; @@ -44,7 +53,17 @@ class ActivityPage { return items.keys.contains(pageIndex); } - static Widget getWidget(int pageIndex) { - return items[pageIndex]?.page ?? pageHome.page; + static Widget getWidget(int pageIndex, BuildContext context) { + return BlocBuilder<ActivityCubit, ActivityState>( + builder: (BuildContext context, ActivityState activityState) { + final Activity currentActivity = activityState.currentActivity; + + if (items.keys.contains(pageIndex)) { + return items[pageIndex]?.builder!(currentActivity: currentActivity) ?? Text('oups'); + } else { + return getWidget(defaultPageIndex, context); + } + }, + ); } } diff --git a/lib/common/ui/pages/parameters.dart b/lib/common/ui/pages/parameters.dart deleted file mode 100644 index aa9a04bd0da5b3ff92ed680df20b2b125de5db1d..0000000000000000000000000000000000000000 --- a/lib/common/ui/pages/parameters.dart +++ /dev/null @@ -1,171 +0,0 @@ -import 'package:flutter/material.dart'; -import 'package:flutter_custom_toolbox/flutter_toolbox.dart'; - -import 'package:colors/common/cubit/nav/nav_cubit_pages.dart'; -import 'package:colors/common/ui/parameters/parameter_widget.dart'; - -import 'package:colors/config/default_activity_settings.dart'; -import 'package:colors/config/default_global_settings.dart'; -import 'package:colors/cubit/activity/activity_cubit.dart'; -import 'package:colors/cubit/settings/settings_activity_cubit.dart'; -import 'package:colors/cubit/settings/settings_global_cubit.dart'; -import 'package:colors/models/activity/activity.dart'; - -class PageParameters extends StatelessWidget { - const PageParameters({super.key}); - - final double separatorHeight = 8.0; - - @override - Widget build(BuildContext context) { - return BlocBuilder<ActivitySettingsCubit, ActivitySettingsState>( - builder: (BuildContext context, ActivitySettingsState activitySettingsState) { - return BlocBuilder<GlobalSettingsCubit, GlobalSettingsState>( - builder: (BuildContext context, GlobalSettingsState globalSettingsState) { - return BlocBuilder<ActivityCubit, ActivityState>( - builder: (BuildContext context, ActivityState activityState) { - final Activity currentActivity = activityState.currentActivity; - - final List<Widget> lines = []; - - // Activity settings - for (String code in DefaultActivitySettings.availableParameters) { - lines.add(Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: buildParametersLine( - code: code, - isGlobal: false, - ), - )); - - lines.add(SizedBox(height: separatorHeight)); - } - - lines.add(Expanded( - child: SizedBox(height: separatorHeight), - )); - - if (currentActivity.canBeResumed == false) { - // Start new activity - lines.add( - AspectRatio( - aspectRatio: 3, - child: ActivityButtonStartNew( - onPressed: () { - BlocProvider.of<ActivityCubit>(context).startNewActivity( - activitySettings: activitySettingsState.settings, - globalSettings: globalSettingsState.settings, - ); - BlocProvider.of<NavCubitPage>(context).goToPageGame(); - }, - ), - ), - ); - } else { - // Resume activity - lines.add(AspectRatio( - aspectRatio: 3, - child: ActivityButtonResumeSaved( - onPressed: () { - BlocProvider.of<ActivityCubit>(context).resumeSavedActivity(); - BlocProvider.of<NavCubitPage>(context).goToPageGame(); - }, - ), - )); - // Delete saved activity - lines.add(SizedBox.square( - dimension: MediaQuery.of(context).size.width / 5, - child: ActivityButtonDeleteSaved( - onPressed: () { - BlocProvider.of<ActivityCubit>(context).deleteSavedActivity(); - }, - ), - )); - } - - lines.add(SizedBox(height: separatorHeight)); - - // Global settings - for (String code in DefaultGlobalSettings.availableParameters) { - lines.add(Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: buildParametersLine( - code: code, - isGlobal: true, - ), - )); - - lines.add(SizedBox(height: separatorHeight)); - } - - return Column( - children: lines, - ); - }, - ); - }, - ); - }, - ); - } - - List<Widget> buildParametersLine({ - required String code, - required bool isGlobal, - }) { - final List<Widget> parameterButtons = []; - - final List<String> availableValues = isGlobal - ? DefaultGlobalSettings.getAvailableValues(code) - : DefaultActivitySettings.getAvailableValues(code); - - if (availableValues.length <= 1) { - return []; - } - - for (String value in availableValues) { - final Widget parameterButton = BlocBuilder<ActivitySettingsCubit, ActivitySettingsState>( - builder: (BuildContext context, ActivitySettingsState activitySettingsState) { - return BlocBuilder<GlobalSettingsCubit, GlobalSettingsState>( - builder: (BuildContext context, GlobalSettingsState globalSettingsState) { - final ActivitySettingsCubit activitySettingsCubit = - BlocProvider.of<ActivitySettingsCubit>(context); - final GlobalSettingsCubit globalSettingsCubit = - BlocProvider.of<GlobalSettingsCubit>(context); - - final String currentValue = isGlobal - ? globalSettingsCubit.getParameterValue(code) - : activitySettingsCubit.getParameterValue(code); - - final bool isSelected = (value == currentValue); - - final double displayWidth = MediaQuery.of(context).size.width; - final double itemWidth = displayWidth / availableValues.length - 4; - - return SizedBox.square( - dimension: itemWidth, - child: ParameterWidget( - code: code, - value: value, - isSelected: isSelected, - size: itemWidth, - activitySettings: activitySettingsState.settings, - globalSettings: globalSettingsState.settings, - onPressed: () { - isGlobal - ? globalSettingsCubit.setParameterValue(code, value) - : activitySettingsCubit.setParameterValue(code, value); - }, - ), - ); - }, - ); - }, - ); - - parameterButtons.add(parameterButton); - } - - return parameterButtons; - } -} diff --git a/lib/common/ui/parameters/parameter_painter.dart b/lib/common/ui/parameters/parameter_painter.dart deleted file mode 100644 index 0ff59951a7313f657b8b29bdbcc7698e1db7f3cf..0000000000000000000000000000000000000000 --- a/lib/common/ui/parameters/parameter_painter.dart +++ /dev/null @@ -1,300 +0,0 @@ -import 'dart:math'; - -import 'package:flutter/material.dart'; -import 'package:flutter_custom_toolbox/flutter_toolbox.dart'; - -import 'package:colors/config/color_theme.dart'; -import 'package:colors/config/default_activity_settings.dart'; -import 'package:colors/config/default_global_settings.dart'; -import 'package:colors/models/settings/settings_activity.dart'; -import 'package:colors/models/settings/settings_global.dart'; - -class ParameterPainter extends CustomPainter { - const ParameterPainter({ - required this.code, - required this.value, - required this.activitySettings, - required this.globalSettings, - }); - - final String code; - final String value; - final ActivitySettings activitySettings; - final GlobalSettings globalSettings; - - @override - void paint(Canvas canvas, Size size) { - // force square - final double canvasSize = min(size.width, size.height); - - // content - switch (code) { - case DefaultActivitySettings.parameterCodeDifficultyLevel: - paintDifficultyLevelParameterItem(canvas, canvasSize); - break; - case DefaultActivitySettings.parameterCodeBoardSize: - paintBoardSizeParameterItem(canvas, canvasSize); - break; - case DefaultActivitySettings.parameterCodeColorsCount: - paintColorsCountParameterItem(canvas, canvasSize); - break; - case DefaultGlobalSettings.parameterCodeSkin: - paintColorsThemeParameterItem(canvas, canvasSize); - break; - default: - printlog('$ParameterPainter -> unknown parameter: $code/$value'); - paintUnknownParameterItem(canvas, canvasSize); - } - } - - @override - bool shouldRepaint(CustomPainter oldDelegate) { - return false; - } - - // "unknown" parameter -> simple block with text - void paintUnknownParameterItem( - final Canvas canvas, - final double size, - ) { - final paint = Paint(); - paint.strokeJoin = StrokeJoin.round; - paint.strokeWidth = 3; - - final textSpan = TextSpan( - text: '$code\n$value', - style: const TextStyle( - color: Colors.black, - fontSize: 18, - fontWeight: FontWeight.bold, - ), - ); - final textPainter = TextPainter( - text: textSpan, - textDirection: TextDirection.ltr, - textAlign: TextAlign.center, - ); - textPainter.layout(); - textPainter.paint( - canvas, - Offset( - (size - textPainter.width) * 0.5, - (size - textPainter.height) * 0.5, - ), - ); - } - - void paintDifficultyLevelParameterItem( - final Canvas canvas, - final double size, - ) { - final List<dynamic> stars = []; - - switch (value) { - case DefaultActivitySettings.difficultyLevelValueEasy: - stars.add([0.5, 0.5]); - break; - case DefaultActivitySettings.difficultyLevelValueMedium: - stars.add([0.3, 0.5]); - stars.add([0.7, 0.5]); - break; - case DefaultActivitySettings.difficultyLevelValueHard: - stars.add([0.3, 0.3]); - stars.add([0.7, 0.3]); - stars.add([0.5, 0.7]); - break; - case DefaultActivitySettings.difficultyLevelValueNightmare: - stars.add([0.3, 0.3]); - stars.add([0.7, 0.3]); - stars.add([0.3, 0.7]); - stars.add([0.7, 0.7]); - break; - default: - printlog('Wrong value for level parameter value: $value'); - } - - final paint = Paint(); - paint.strokeJoin = StrokeJoin.round; - paint.strokeWidth = 3 / 100 * size; - - // Stars - final textSpan = TextSpan( - text: '⭐', - style: TextStyle( - color: Colors.black, - fontSize: size / 3, - fontWeight: FontWeight.bold, - ), - ); - final textPainter = TextPainter( - text: textSpan, - textDirection: TextDirection.ltr, - textAlign: TextAlign.center, - ); - textPainter.layout(); - - for (var center in stars) { - textPainter.paint( - canvas, - Offset( - size * center[0] - textPainter.width * 0.5, - size * center[1] - textPainter.height * 0.5, - ), - ); - } - } - - void paintBoardSizeParameterItem( - final Canvas canvas, - final double size, - ) { - int gridWidth = 1; - - switch (value) { - case DefaultActivitySettings.boardSizeValueSmall: - gridWidth = 2; - break; - case DefaultActivitySettings.boardSizeValueMedium: - gridWidth = 3; - break; - case DefaultActivitySettings.boardSizeValueLarge: - gridWidth = 4; - break; - case DefaultActivitySettings.boardSizeValueExtra: - gridWidth = 5; - break; - default: - printlog('Wrong value for boardSize parameter value: $value'); - } - - final paint = Paint(); - paint.strokeJoin = StrokeJoin.round; - paint.strokeWidth = 3 / 100 * size; - - // Mini grid - final squareBackgroundColor = Colors.grey.shade200; - final squareBorderColor = Colors.grey.shade800; - - final double cellSize = size / 7; - final double origin = (size - gridWidth * cellSize) / 2; - - for (int row = 0; row < gridWidth; row++) { - for (int col = 0; col < gridWidth; col++) { - final Offset topLeft = Offset(origin + col * cellSize, origin + row * cellSize); - final Offset bottomRight = topLeft + Offset(cellSize, cellSize); - - paint.color = squareBackgroundColor; - paint.style = PaintingStyle.fill; - canvas.drawRect(Rect.fromPoints(topLeft, bottomRight), paint); - - paint.color = squareBorderColor; - paint.style = PaintingStyle.stroke; - canvas.drawRect(Rect.fromPoints(topLeft, bottomRight), paint); - } - } - } - - void paintColorsCountParameterItem( - final Canvas canvas, - final double size, - ) { - final paint = Paint(); - paint.strokeJoin = StrokeJoin.round; - paint.strokeWidth = 3; - - // Colors preview - const List<Offset> positions = [ - Offset(0, 0), - Offset(1, 0), - Offset(2, 0), - Offset(2, 1), - Offset(2, 2), - Offset(1, 2), - Offset(0, 2), - Offset(0, 1), - ]; - - const skin = DefaultGlobalSettings.defaultSkinValue; - - final double padding = 4 / 100 * size; - final double margin = 3 / 100 * size; - final double width = ((size - 2 * padding) / 3) - 2 * margin; - - final int maxValue = int.parse(value); - for (int colorIndex = 0; colorIndex < maxValue; colorIndex++) { - final Offset position = positions[colorIndex]; - - final Offset topLeft = Offset(padding + margin + position.dx * (width + 2 * margin), - padding + margin + position.dy * (width + 2 * margin)); - - final Offset bottomRight = topLeft + Offset(width, width); - - final squareColor = Color(ColorTheme.getColorCode(skin, colorIndex + 1)); - paint.color = squareColor; - paint.style = PaintingStyle.fill; - canvas.drawRect(Rect.fromPoints(topLeft, bottomRight), paint); - - final borderColor = squareColor.darken(20); - paint.color = borderColor; - paint.style = PaintingStyle.stroke; - canvas.drawRect(Rect.fromPoints(topLeft, bottomRight), paint); - } - - // centered text value - final textSpan = TextSpan( - text: value.toString(), - style: TextStyle( - color: Colors.black, - fontSize: size / 4, - fontWeight: FontWeight.bold, - ), - ); - final textPainter = TextPainter( - text: textSpan, - textDirection: TextDirection.ltr, - textAlign: TextAlign.center, - ); - textPainter.layout(); - textPainter.paint( - canvas, - Offset( - (size - textPainter.width) * 0.5, - (size - textPainter.height) * 0.5, - ), - ); - } - - void paintColorsThemeParameterItem( - final Canvas canvas, - final double size, - ) { - const int gridWidth = 4; - - final paint = Paint(); - paint.strokeJoin = StrokeJoin.round; - paint.strokeWidth = 3; - - // Mini grid - final borderColor = Colors.grey.shade800; - - final double cellSize = size / gridWidth; - final double origin = (size - gridWidth * cellSize) / 2; - - for (int row = 0; row < gridWidth; row++) { - for (int col = 0; col < gridWidth; col++) { - final Offset topLeft = Offset(origin + col * cellSize, origin + row * cellSize); - final Offset bottomRight = topLeft + Offset(cellSize, cellSize); - - const squareColor = Colors.pink; - - paint.color = squareColor; - paint.style = PaintingStyle.fill; - canvas.drawRect(Rect.fromPoints(topLeft, bottomRight), paint); - - paint.color = borderColor; - paint.style = PaintingStyle.stroke; - canvas.drawRect(Rect.fromPoints(topLeft, bottomRight), paint); - } - } - } -} diff --git a/lib/common/ui/parameters/parameter_widget.dart b/lib/common/ui/parameters/parameter_widget.dart deleted file mode 100644 index eb418ce7d5d293e85ee84d94834a4b09055056e0..0000000000000000000000000000000000000000 --- a/lib/common/ui/parameters/parameter_widget.dart +++ /dev/null @@ -1,212 +0,0 @@ -import 'package:flutter/material.dart'; -import 'package:flutter_custom_toolbox/flutter_toolbox.dart'; - -import 'package:colors/common/ui/parameters/parameter_painter.dart'; - -import 'package:colors/config/default_activity_settings.dart'; -import 'package:colors/config/default_global_settings.dart'; -import 'package:colors/models/settings/settings_activity.dart'; -import 'package:colors/models/settings/settings_global.dart'; - -class ParameterWidget extends StatelessWidget { - const ParameterWidget({ - super.key, - required this.code, - required this.value, - required this.isSelected, - required this.size, - required this.activitySettings, - required this.globalSettings, - required this.onPressed, - }); - - final String code; - final String value; - final bool isSelected; - final double size; - final ActivitySettings activitySettings; - final GlobalSettings globalSettings; - final VoidCallback onPressed; - - static const Color buttonColorActive = Colors.blue; - static const Color buttonColorInactive = Colors.white; - static const double buttonBorderWidth = 4.0; - static const double buttonBorderRadius = 12.0; - - @override - Widget build(BuildContext context) { - Widget content = const SizedBox.shrink(); - - switch (code) { - case DefaultActivitySettings.parameterCodeDifficultyLevel: - content = getDifficultyLevelParameterItem(); - break; - case DefaultActivitySettings.parameterCodeBoardSize: - content = getBoardSizeParameterItem(); - break; - case DefaultActivitySettings.parameterCodeColorsCount: - content = getColorsCountParameterItem(); - break; - case DefaultGlobalSettings.parameterCodeSkin: - content = getColorsThemeParameterItem(); - break; - default: - printlog('$ParameterWidget -> unknown parameter: $code/$value'); - content = getUnknownParameterItem(); - } - - final Color buttonColor = isSelected ? buttonColorActive : buttonColorInactive; - - return Container( - decoration: BoxDecoration( - color: buttonColor, - borderRadius: BorderRadius.circular(buttonBorderRadius), - border: Border.all( - color: buttonColor, - width: buttonBorderWidth, - ), - ), - child: content, - ); - } - - // "unknown" parameter -> simple block with text - Widget getUnknownParameterItem() { - return StyledButton.text( - caption: '$code / $value', - color: Colors.grey, - onPressed: null, - ); - } - - Widget getDifficultyLevelParameterItem() { - Color backgroundColor = Colors.grey; - - switch (value) { - case DefaultActivitySettings.difficultyLevelValueEasy: - backgroundColor = Colors.green; - break; - case DefaultActivitySettings.difficultyLevelValueMedium: - backgroundColor = Colors.orange; - break; - case DefaultActivitySettings.difficultyLevelValueHard: - backgroundColor = Colors.red; - break; - case DefaultActivitySettings.difficultyLevelValueNightmare: - backgroundColor = Colors.purple; - break; - default: - printlog('Wrong value for level parameter value: $value'); - } - - return StyledButton( - color: backgroundColor, - onPressed: onPressed, - child: CustomPaint( - size: Size(size, size), - willChange: false, - painter: ParameterPainter( - code: code, - value: value, - activitySettings: activitySettings, - globalSettings: globalSettings, - ), - isComplex: true, - ), - ); - } - - Widget getBoardSizeParameterItem() { - Color backgroundColor = Colors.grey; - - switch (value) { - case DefaultActivitySettings.boardSizeValueSmall: - backgroundColor = Colors.green; - break; - case DefaultActivitySettings.boardSizeValueMedium: - backgroundColor = Colors.orange; - break; - case DefaultActivitySettings.boardSizeValueLarge: - backgroundColor = Colors.red; - break; - case DefaultActivitySettings.boardSizeValueExtra: - backgroundColor = Colors.purple; - break; - default: - printlog('Wrong value for boardSize parameter value: $value'); - } - - return StyledButton( - color: backgroundColor, - onPressed: onPressed, - child: CustomPaint( - size: Size(size, size), - willChange: false, - painter: ParameterPainter( - code: code, - value: value, - activitySettings: activitySettings, - globalSettings: globalSettings, - ), - isComplex: true, - ), - ); - } - - Widget getColorsCountParameterItem() { - Color backgroundColor = Colors.grey; - - switch (value) { - case DefaultActivitySettings.colorsCountValueLow: - backgroundColor = Colors.green; - break; - case DefaultActivitySettings.colorsCountValueMedium: - backgroundColor = Colors.orange; - break; - case DefaultActivitySettings.colorsCountValueHigh: - backgroundColor = Colors.red; - break; - case DefaultActivitySettings.colorsCountValueVeryHigh: - backgroundColor = Colors.purple; - break; - default: - printlog('Wrong value for colorsCount parameter value: $value'); - } - - return StyledButton( - color: backgroundColor, - onPressed: onPressed, - child: CustomPaint( - size: Size(size, size), - willChange: false, - painter: ParameterPainter( - code: code, - value: value, - activitySettings: activitySettings, - globalSettings: globalSettings, - ), - isComplex: true, - ), - ); - } - - Widget getColorsThemeParameterItem() { - Color backgroundColor = Colors.grey; - - return StyledButton( - color: backgroundColor, - onPressed: onPressed, - child: CustomPaint( - size: Size(size, size), - willChange: false, - painter: ParameterPainter( - code: code, - value: value, - activitySettings: activitySettings, - globalSettings: globalSettings, - ), - isComplex: true, - ), - ); - } -} diff --git a/lib/common/ui/screens/activity.dart b/lib/common/ui/screens/activity.dart index b44d46812aef8a287a607dc88273b7e0b03176c2..1fc18b475935a679d7f45468c0043a52806791ff 100644 --- a/lib/common/ui/screens/activity.dart +++ b/lib/common/ui/screens/activity.dart @@ -11,7 +11,7 @@ class ScreenActivity extends StatelessWidget { Widget build(BuildContext context) { return BlocBuilder<NavCubitPage, int>( builder: (BuildContext context, int pageIndex) { - return ActivityPage.getWidget(pageIndex); + return ActivityPage.getWidget(pageIndex, context); }, ); } diff --git a/lib/common/utils/color_theme_utils.dart b/lib/common/utils/color_theme_utils.dart new file mode 100644 index 0000000000000000000000000000000000000000..7d49c9f944b1517de8fb844c74216d5433b6675a --- /dev/null +++ b/lib/common/utils/color_theme_utils.dart @@ -0,0 +1,34 @@ +import 'package:flutter/material.dart'; + +import 'package:colors/config/color_theme.dart'; + +class ColorThemeUtils { + static int getColorsCount(String colorTheme) { + if (ColorTheme.colorThemes.containsKey(colorTheme) && + null != ColorTheme.colorThemes[colorTheme]) { + List<int> colors = ColorTheme.colorThemes[colorTheme] ?? []; + + return colors.length; + } + + return 0; + } + + static int getColorCode(int? value, String colorTheme) { + if (value != null && + ColorTheme.colorThemes.containsKey(colorTheme) && + null != ColorTheme.colorThemes[colorTheme]) { + List<int> skinColors = ColorTheme.colorThemes[colorTheme] ?? []; + return (skinColors[value % getColorsCount(colorTheme)]) | 0xFF000000; + } + return ColorTheme.defaultThemeColor | 0xFF000000; + } + + static Color getColor(int? value, String colorTheme) { + return Color(getColorCode(value, colorTheme)); + } + + static Color getDefaultBorderColor() { + return Colors.grey; + } +} diff --git a/lib/config/application_config.dart b/lib/config/application_config.dart index 35858aabee128ed6f2fca23d434ec33f5779bd5c..bd6a728cb81cf203fb66c8eb79f5809ddce39a8e 100644 --- a/lib/config/application_config.dart +++ b/lib/config/application_config.dart @@ -1,3 +1,186 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_custom_toolbox/flutter_toolbox.dart'; + +import 'package:colors/common/cubit/nav/nav_cubit_pages.dart'; + +import 'package:colors/cubit/activity/activity_cubit.dart'; +import 'package:colors/ui/parameters/parameter_painter_board_size.dart'; +import 'package:colors/ui/parameters/parameter_painter_color_theme.dart'; +import 'package:colors/ui/parameters/parameter_painter_colors_count.dart'; +import 'package:colors/ui/parameters/parameter_painter_difficulty_level.dart'; + class ApplicationConfig { - static const String appTitle = 'Colors'; + // known parameters + static const String parameterCodeDifficultyLevel = 'activity.difficultyLevel'; + static const String parameterCodeBoardSize = 'activity.boardSize'; + static const String parameterCodeColorsCount = 'activity.colorsCount'; + static const String parameterCodeColorTheme = 'global.colorTheme'; + + // difficulty level values + static const String difficultyLevelValueEasy = 'easy'; + static const String difficultyLevelValueMedium = 'medium'; + static const String difficultyLevelValueHard = 'hard'; + static const String difficultyLevelValueNightmare = 'nightmare'; + + // board size values + static const String boardSizeValueSmall = 'small'; + static const String boardSizeValueMedium = 'medium'; + static const String boardSizeValueLarge = 'large'; + static const String boardSizeValueExtraLarge = 'extra'; + + // colors count values + static const String colorsCountValueLow = '5'; + static const String colorsCountValueMedium = '6'; + static const String colorsCountValueHigh = '7'; + static const String colorsCountValueVeryHigh = '8'; + + // colors theme values + static const String colorThemeDefault = 'default'; + static const String colorThemeSweethope = 'sweethope'; + static const String colorThemeNostalgicDreams = 'nostalgic-dreams'; + static const String colorThemeArjibi8 = 'arjibi8'; + + static final ApplicationConfigDefinition config = ApplicationConfigDefinition( + appTitle: 'Colors', + 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, + ), + ApplicationSettingsParameterItemValue( + value: difficultyLevelValueNightmare, + color: Colors.purple, + ), + ], + customPainter: (context, value) { + return ParameterPainterDifficultyLevel(context: context, value: value); + }, + ), + + // board size + ApplicationSettingsParameter( + code: parameterCodeBoardSize, + values: [ + ApplicationSettingsParameterItemValue( + value: boardSizeValueSmall, + color: Colors.green, + ), + ApplicationSettingsParameterItemValue( + value: boardSizeValueMedium, + color: Colors.orange, + isDefault: true, + ), + ApplicationSettingsParameterItemValue( + value: boardSizeValueLarge, + color: Colors.red, + ), + ApplicationSettingsParameterItemValue( + value: boardSizeValueExtraLarge, + color: Colors.purple, + ), + ], + customPainter: (context, value) { + return ParameterPainterBoardSize(value: value, context: context); + }, + intValueGetter: (String value) { + const Map<String, int> intValues = { + boardSizeValueSmall: 6, + boardSizeValueMedium: 10, + boardSizeValueLarge: 14, + boardSizeValueExtraLarge: 20, + }; + return intValues[value] ?? 0; + }, + ), + + // colors count + ApplicationSettingsParameter( + code: parameterCodeColorsCount, + values: [ + ApplicationSettingsParameterItemValue( + value: colorsCountValueLow, + color: Colors.green, + ), + ApplicationSettingsParameterItemValue( + value: colorsCountValueMedium, + color: Colors.orange, + isDefault: true, + ), + ApplicationSettingsParameterItemValue( + value: colorsCountValueHigh, + color: Colors.red, + ), + ApplicationSettingsParameterItemValue( + value: colorsCountValueVeryHigh, + color: Colors.purple, + ), + ], + customPainter: (context, value) { + return ParameterPainterColorsCount(value: value, context: context); + }, + ), + + // colors theme + ApplicationSettingsParameter( + code: parameterCodeColorTheme, + displayedOnTop: false, + values: [ + ApplicationSettingsParameterItemValue( + value: colorThemeDefault, + isDefault: true, + ), + 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).goToPageGame(); + }, + deleteCurrentActivity: (BuildContext context) { + BlocProvider.of<ActivityCubit>(context).deleteSavedActivity(); + BlocProvider.of<ActivityCubit>(context).state.currentActivity.dump(); + }, + resumeActivity: (BuildContext context) { + BlocProvider.of<ActivityCubit>(context).resumeSavedActivity(); + BlocProvider.of<NavCubitPage>(context).goToPageGame(); + }, + ); + + static int getMovesCountLimitDeltaFromLevelCode(String parameterLevel) { + const Map<String, int> values = { + difficultyLevelValueEasy: 5, + difficultyLevelValueMedium: 3, + difficultyLevelValueHard: 1, + difficultyLevelValueNightmare: -1, + }; + return values[parameterLevel] ?? + getMovesCountLimitDeltaFromLevelCode(ApplicationConfig.config + .getFromCode(ApplicationConfig.parameterCodeDifficultyLevel) + .defaultValue); + } } diff --git a/lib/config/color_theme.dart b/lib/config/color_theme.dart index 73d2e37c974ac8b52a94839906e4f73e5246670e..af72b611ae089394cbce846b2910edfd5b901196 100644 --- a/lib/config/color_theme.dart +++ b/lib/config/color_theme.dart @@ -1,8 +1,8 @@ -import 'package:colors/config/default_global_settings.dart'; +import 'package:colors/config/application_config.dart'; class ColorTheme { - static const Map<String, List<int>> borderColors = { - DefaultGlobalSettings.skinValueColors: [ + static const Map<String, List<int>> colorThemes = { + ApplicationConfig.colorThemeDefault: [ 0xffffff, 0xe63a3f, 0x708cfd, @@ -13,16 +13,46 @@ class ColorTheme { 0x38ffff, 0xf2739d, ], + + // https://lospec.com/palette-list/sweethope + ApplicationConfig.colorThemeSweethope: [ + 0xffffff, + 0x615e85, + 0x9c8dc2, + 0xd9a3cd, + 0xebc3a7, + 0xe0e0dc, + 0xa3d1af, + 0x90b4de, + 0x717fb0, + ], + + // https://lospec.com/palette-list/nostalgic-dreams + ApplicationConfig.colorThemeNostalgicDreams: [ + 0xffffff, + 0xd9af80, + 0xb07972, + 0x524352, + 0x686887, + 0x7f9bb0, + 0xbfd4b0, + 0x90b870, + 0x628c70, + ], + + // https://lospec.com/palette-list/arjibi8 + ApplicationConfig.colorThemeArjibi8: [ + 0xffffff, + 0x8bc7bf, + 0x5796a1, + 0x524bb3, + 0x471b6e, + 0x702782, + 0xb0455a, + 0xde8b6f, + 0xebd694, + ], }; - static const int defaultBorderColor = 0x808080; - static int getColorCode(String skin, int value) { - if (borderColors.containsKey(skin) && null != borderColors[skin]) { - final List<int>? skinColors = borderColors[skin]; - if (null != skinColors) { - return skinColors.elementAt(value) | 0xFF000000; - } - } - return defaultBorderColor | 0xFF000000; - } + static const int defaultThemeColor = 0x808080; } diff --git a/lib/config/default_activity_settings.dart b/lib/config/default_activity_settings.dart deleted file mode 100644 index cf379584f2db6f1a1348c4c4b67dd4828fbcb8d0..0000000000000000000000000000000000000000 --- a/lib/config/default_activity_settings.dart +++ /dev/null @@ -1,82 +0,0 @@ -import 'package:flutter_custom_toolbox/flutter_toolbox.dart'; - -class DefaultActivitySettings { - // available game parameters codes - static const String parameterCodeDifficultyLevel = 'difficultyLevel'; - static const String parameterCodeBoardSize = 'boardSize'; - static const String parameterCodeColorsCount = 'colorsCount'; - static const List<String> availableParameters = [ - parameterCodeDifficultyLevel, - parameterCodeBoardSize, - parameterCodeColorsCount, - ]; - - // difficulty level: available values - static const String difficultyLevelValueEasy = 'easy'; - static const String difficultyLevelValueMedium = 'medium'; - static const String difficultyLevelValueHard = 'hard'; - static const String difficultyLevelValueNightmare = 'nightmare'; - static const List<String> allowedDifficultyLevelValues = [ - difficultyLevelValueEasy, - difficultyLevelValueMedium, - difficultyLevelValueHard, - difficultyLevelValueNightmare, - ]; - // difficulty level: default value - static const String defaultDifficultyLevelValue = difficultyLevelValueMedium; - - // board size: available values - static const String boardSizeValueSmall = 'small'; - static const String boardSizeValueMedium = 'medium'; - static const String boardSizeValueLarge = 'large'; - static const String boardSizeValueExtra = 'extra'; - static const List<String> allowedBoardSizeValues = [ - boardSizeValueSmall, - boardSizeValueMedium, - boardSizeValueLarge, - boardSizeValueExtra, - ]; - // board size: default value - static const String defaultBoardSizeValue = boardSizeValueMedium; - - // colors count: available values - static const String colorsCountValueLow = '5'; - static const String colorsCountValueMedium = '6'; - static const String colorsCountValueHigh = '7'; - static const String colorsCountValueVeryHigh = '8'; - static const List<String> allowedColorsCountValues = [ - colorsCountValueLow, - colorsCountValueMedium, - colorsCountValueHigh, - colorsCountValueVeryHigh, - ]; - // colors count: default value - static const String defaultColorsCountValue = colorsCountValueMedium; - - // available values from parameter code - static List<String> getAvailableValues(String parameterCode) { - switch (parameterCode) { - case parameterCodeDifficultyLevel: - return DefaultActivitySettings.allowedDifficultyLevelValues; - case parameterCodeBoardSize: - return DefaultActivitySettings.allowedBoardSizeValues; - case parameterCodeColorsCount: - return DefaultActivitySettings.allowedColorsCountValues; - } - - printlog('Did not find any available value for game parameter "$parameterCode".'); - return []; - } - - static int getMovesCountLimitDeltaFromLevelCode(String parameterLevel) { - const Map<String, int> values = { - difficultyLevelValueEasy: 5, - difficultyLevelValueMedium: 3, - difficultyLevelValueHard: 1, - difficultyLevelValueNightmare: -1, - }; - return values[parameterLevel] ?? - getMovesCountLimitDeltaFromLevelCode( - DefaultActivitySettings.defaultDifficultyLevelValue); - } -} diff --git a/lib/config/default_global_settings.dart b/lib/config/default_global_settings.dart deleted file mode 100644 index 627a390175e188a5b4d672c8f74fe46633a3aaac..0000000000000000000000000000000000000000 --- a/lib/config/default_global_settings.dart +++ /dev/null @@ -1,28 +0,0 @@ -import 'package:flutter_custom_toolbox/flutter_toolbox.dart'; - -class DefaultGlobalSettings { - // available global parameters codes - static const String parameterCodeSkin = 'skin'; - static const List<String> availableParameters = [ - parameterCodeSkin, - ]; - - // skin: available values - static const String skinValueColors = 'colors'; - static const List<String> allowedSkinValues = [ - skinValueColors, - ]; - // skin: default value - static const String defaultSkinValue = skinValueColors; - - // available values from parameter code - static List<String> getAvailableValues(String parameterCode) { - switch (parameterCode) { - case parameterCodeSkin: - return DefaultGlobalSettings.allowedSkinValues; - } - - printlog('Did not find any available value for global parameter "$parameterCode".'); - return []; - } -} diff --git a/lib/cubit/activity/activity_cubit.dart b/lib/cubit/activity/activity_cubit.dart index 255740148da56f4e15e40b783242ff3d3c4ac88e..a0196af8666cd35cefebc855460a8eb875d002e6 100644 --- a/lib/cubit/activity/activity_cubit.dart +++ b/lib/cubit/activity/activity_cubit.dart @@ -1,13 +1,10 @@ import 'dart:async'; import 'dart:math'; -import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:flutter_custom_toolbox/flutter_toolbox.dart'; import 'package:colors/models/activity/activity.dart'; -import 'package:colors/models/settings/settings_activity.dart'; -import 'package:colors/models/settings/settings_global.dart'; part 'activity_state.dart'; @@ -27,7 +24,6 @@ class ActivityCubit extends HydratedCubit<ActivityState> { final Activity activity = Activity( // Settings activitySettings: state.currentActivity.activitySettings, - globalSettings: state.currentActivity.globalSettings, // State isRunning: state.currentActivity.isRunning, isStarted: state.currentActivity.isStarted, @@ -43,19 +39,18 @@ class ActivityCubit extends HydratedCubit<ActivityState> { progressDelta: state.currentActivity.progressDelta, gameWon: state.currentActivity.gameWon, ); - // game.dump(); + // activity.dump(); updateState(activity); } - void startNewActivity({ - required ActivitySettings activitySettings, - required GlobalSettings globalSettings, - }) { + void startNewActivity(BuildContext context) { + final ActivitySettingsCubit activitySettingsCubit = + BlocProvider.of<ActivitySettingsCubit>(context); + final Activity newActivity = Activity.createNew( // Settings - activitySettings: activitySettings, - globalSettings: globalSettings, + activitySettings: activitySettingsCubit.state.settings, ); newActivity.dump(); @@ -66,6 +61,10 @@ class ActivityCubit extends HydratedCubit<ActivityState> { refresh(); } + bool canBeResumed() { + return state.currentActivity.canBeResumed; + } + void quitActivity() { state.currentActivity.isRunning = false; refresh(); @@ -77,8 +76,8 @@ class ActivityCubit extends HydratedCubit<ActivityState> { } void deleteSavedActivity() { - state.currentActivity.isRunning = false; - state.currentActivity.isFinished = true; + updateGameIsRunning(false); + updateGameIsFinished(true); refresh(); } diff --git a/lib/cubit/settings/settings_activity_cubit.dart b/lib/cubit/settings/settings_activity_cubit.dart deleted file mode 100644 index 962a5ffde3178b4cc4d58336994a3fa2de7e96d1..0000000000000000000000000000000000000000 --- a/lib/cubit/settings/settings_activity_cubit.dart +++ /dev/null @@ -1,86 +0,0 @@ -import 'package:flutter/material.dart'; -import 'package:flutter_custom_toolbox/flutter_toolbox.dart'; - -import 'package:colors/config/default_activity_settings.dart'; -import 'package:colors/models/settings/settings_activity.dart'; - -part 'settings_activity_state.dart'; - -class ActivitySettingsCubit extends HydratedCubit<ActivitySettingsState> { - ActivitySettingsCubit() - : super(ActivitySettingsState(settings: ActivitySettings.createDefault())); - - void setValues({ - String? difficultyLevel, - String? boardSize, - String? colorsCount, - }) { - emit( - ActivitySettingsState( - settings: ActivitySettings( - difficultyLevel: difficultyLevel ?? state.settings.difficultyLevel, - parameterSize: boardSize ?? state.settings.parameterSize, - parameterColorsCount: colorsCount ?? state.settings.parameterColorsCount, - ), - ), - ); - } - - String getParameterValue(String code) { - switch (code) { - case DefaultActivitySettings.parameterCodeDifficultyLevel: - return ActivitySettings.getLevelValueFromUnsafe(state.settings.difficultyLevel); - case DefaultActivitySettings.parameterCodeBoardSize: - return ActivitySettings.getSizeValueFromUnsafe(state.settings.parameterSize); - case DefaultActivitySettings.parameterCodeColorsCount: - return ActivitySettings.getColorsValueFromUnsafe(state.settings.parameterColorsCount); - } - - return ''; - } - - void setParameterValue(String code, String value) { - final String difficultyLevel = - (code == DefaultActivitySettings.parameterCodeDifficultyLevel) - ? value - : getParameterValue(DefaultActivitySettings.parameterCodeDifficultyLevel); - final String boardSize = (code == DefaultActivitySettings.parameterCodeBoardSize) - ? value - : getParameterValue(DefaultActivitySettings.parameterCodeBoardSize); - final String colorsCount = (code == DefaultActivitySettings.parameterCodeColorsCount) - ? value - : getParameterValue(DefaultActivitySettings.parameterCodeColorsCount); - - setValues( - difficultyLevel: difficultyLevel, - boardSize: boardSize, - colorsCount: colorsCount, - ); - } - - @override - ActivitySettingsState? fromJson(Map<String, dynamic> json) { - final String difficultyLevel = - json[DefaultActivitySettings.parameterCodeDifficultyLevel] as String; - final String boardSize = json[DefaultActivitySettings.parameterCodeBoardSize] as String; - final String colorsCount = - json[DefaultActivitySettings.parameterCodeColorsCount] as String; - - return ActivitySettingsState( - settings: ActivitySettings( - difficultyLevel: difficultyLevel, - parameterSize: boardSize, - parameterColorsCount: colorsCount, - ), - ); - } - - @override - Map<String, dynamic>? toJson(ActivitySettingsState state) { - return <String, dynamic>{ - DefaultActivitySettings.parameterCodeDifficultyLevel: state.settings.difficultyLevel, - DefaultActivitySettings.parameterCodeBoardSize: state.settings.parameterSize, - DefaultActivitySettings.parameterCodeColorsCount: state.settings.parameterColorsCount, - }; - } -} diff --git a/lib/cubit/settings/settings_activity_state.dart b/lib/cubit/settings/settings_activity_state.dart deleted file mode 100644 index 2b2de42011634e81ae9e6f8bcaa1577f239c778b..0000000000000000000000000000000000000000 --- a/lib/cubit/settings/settings_activity_state.dart +++ /dev/null @@ -1,15 +0,0 @@ -part of 'settings_activity_cubit.dart'; - -@immutable -class ActivitySettingsState extends Equatable { - const ActivitySettingsState({ - required this.settings, - }); - - final ActivitySettings settings; - - @override - List<dynamic> get props => <dynamic>[ - settings, - ]; -} diff --git a/lib/cubit/settings/settings_global_cubit.dart b/lib/cubit/settings/settings_global_cubit.dart deleted file mode 100644 index f9213070bd6b204c7b70fb3b1dd2161e806342c5..0000000000000000000000000000000000000000 --- a/lib/cubit/settings/settings_global_cubit.dart +++ /dev/null @@ -1,59 +0,0 @@ -import 'package:flutter/material.dart'; -import 'package:flutter_custom_toolbox/flutter_toolbox.dart'; - -import 'package:colors/config/default_global_settings.dart'; -import 'package:colors/models/settings/settings_global.dart'; - -part 'settings_global_state.dart'; - -class GlobalSettingsCubit extends HydratedCubit<GlobalSettingsState> { - GlobalSettingsCubit() : super(GlobalSettingsState(settings: GlobalSettings.createDefault())); - - void setValues({ - String? skin, - }) { - emit( - GlobalSettingsState( - settings: GlobalSettings( - skin: skin ?? state.settings.skin, - ), - ), - ); - } - - String getParameterValue(String code) { - switch (code) { - case DefaultGlobalSettings.parameterCodeSkin: - return GlobalSettings.getSkinValueFromUnsafe(state.settings.skin); - } - return ''; - } - - void setParameterValue(String code, String value) { - final String skin = (code == DefaultGlobalSettings.parameterCodeSkin) - ? value - : getParameterValue(DefaultGlobalSettings.parameterCodeSkin); - - setValues( - skin: skin, - ); - } - - @override - GlobalSettingsState? fromJson(Map<String, dynamic> json) { - final String skin = json[DefaultGlobalSettings.parameterCodeSkin] as String; - - return GlobalSettingsState( - settings: GlobalSettings( - skin: skin, - ), - ); - } - - @override - Map<String, dynamic>? toJson(GlobalSettingsState state) { - return <String, dynamic>{ - DefaultGlobalSettings.parameterCodeSkin: state.settings.skin, - }; - } -} diff --git a/lib/cubit/settings/settings_global_state.dart b/lib/cubit/settings/settings_global_state.dart deleted file mode 100644 index ebcddd700f252257223ca8e16c85202b04f3ff24..0000000000000000000000000000000000000000 --- a/lib/cubit/settings/settings_global_state.dart +++ /dev/null @@ -1,15 +0,0 @@ -part of 'settings_global_cubit.dart'; - -@immutable -class GlobalSettingsState extends Equatable { - const GlobalSettingsState({ - required this.settings, - }); - - final GlobalSettings settings; - - @override - List<dynamic> get props => <dynamic>[ - settings, - ]; -} diff --git a/lib/main.dart b/lib/main.dart index 986e6162dcd20df4295a71399d87cb11a8177220..e460990941e93b165b45b30a0a373c395e82d3ae 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -9,8 +9,6 @@ import 'package:colors/common/cubit/nav/nav_cubit_screens.dart'; import 'package:colors/config/application_config.dart'; import 'package:colors/cubit/activity/activity_cubit.dart'; -import 'package:colors/cubit/settings/settings_activity_cubit.dart'; -import 'package:colors/cubit/settings/settings_global_cubit.dart'; import 'package:colors/ui/skeleton.dart'; void main() async { @@ -61,17 +59,14 @@ class MyApp extends StatelessWidget { BlocProvider<ActivityCubit>( create: (context) => ActivityCubit(), ), - BlocProvider<GlobalSettingsCubit>( - create: (context) => GlobalSettingsCubit(), - ), BlocProvider<ActivitySettingsCubit>( - create: (context) => ActivitySettingsCubit(), + create: (context) => ActivitySettingsCubit(appConfig: ApplicationConfig.config), ), ], child: BlocBuilder<ApplicationThemeModeCubit, ApplicationThemeModeState>( builder: (BuildContext context, ApplicationThemeModeState state) { return MaterialApp( - title: ApplicationConfig.appTitle, + title: ApplicationConfig.config.appTitle, home: const SkeletonScreen(), // Theme stuff diff --git a/lib/models/activity/activity.dart b/lib/models/activity/activity.dart index 4cac48753a6e0b3b9ebe3b2445c5f32fa8f9dc21..14e5b36afc381e2bf4818d8c0adc44fedc6691bc 100644 --- a/lib/models/activity/activity.dart +++ b/lib/models/activity/activity.dart @@ -1,15 +1,12 @@ import 'package:flutter_custom_toolbox/flutter_toolbox.dart'; -import 'package:colors/config/default_activity_settings.dart'; +import 'package:colors/config/application_config.dart'; import 'package:colors/models/activity/board.dart'; -import 'package:colors/models/settings/settings_activity.dart'; -import 'package:colors/models/settings/settings_global.dart'; class Activity { Activity({ // Settings required this.activitySettings, - required this.globalSettings, // State this.isRunning = false, @@ -31,7 +28,6 @@ class Activity { // Settings final ActivitySettings activitySettings; - final GlobalSettings globalSettings; // State bool isRunning; @@ -53,8 +49,7 @@ class Activity { factory Activity.createEmpty() { return Activity( // Settings - activitySettings: ActivitySettings.createDefault(), - globalSettings: GlobalSettings.createDefault(), + activitySettings: ActivitySettings.createDefault(appConfig: ApplicationConfig.config), // Base data board: Board.createEmpty(), ); @@ -62,30 +57,30 @@ class Activity { factory Activity.createNew({ ActivitySettings? activitySettings, - GlobalSettings? globalSettings, }) { - final ActivitySettings newActivitySettings = - activitySettings ?? ActivitySettings.createDefault(); - final GlobalSettings newGlobalSettings = globalSettings ?? GlobalSettings.createDefault(); - - final int baseMaxMovesCount = - (30 * (newActivitySettings.boardSize * newActivitySettings.colorsCount) / (17 * 6)) - .round(); + final ActivitySettings newActivitySettings = activitySettings ?? + ActivitySettings.createDefault(appConfig: ApplicationConfig.config); + + final int baseMaxMovesCount = (30 * + (newActivitySettings.getAsInt(ApplicationConfig.parameterCodeBoardSize) * + newActivitySettings.getAsInt(ApplicationConfig.parameterCodeColorsCount)) / + (17 * 6)) + .round(); final int deltaMovesCountFromLevel = - DefaultActivitySettings.getMovesCountLimitDeltaFromLevelCode( - newActivitySettings.difficultyLevel); + ApplicationConfig.getMovesCountLimitDeltaFromLevelCode( + newActivitySettings.get(ApplicationConfig.parameterCodeDifficultyLevel)); return Activity( // Settings activitySettings: newActivitySettings, - globalSettings: newGlobalSettings, // State isRunning: true, // Base data board: Board.createRandom(newActivitySettings), // Game data progress: 1, - progressTotal: newActivitySettings.boardSize * newActivitySettings.boardSize, + progressTotal: newActivitySettings.getAsInt(ApplicationConfig.parameterCodeBoardSize) * + newActivitySettings.getAsInt(ApplicationConfig.parameterCodeBoardSize), maxMovesCount: baseMaxMovesCount + deltaMovesCountFromLevel, ); } @@ -96,15 +91,14 @@ class Activity { printlog(''); printlog('## Current game dump:'); printlog(''); - printlog('$Activity:'); - printlog(' Settings'); activitySettings.dump(); - globalSettings.dump(); + printlog('$Activity:'); printlog(' State'); printlog(' isRunning: $isRunning'); printlog(' isStarted: $isStarted'); printlog(' isFinished: $isFinished'); printlog(' animationInProgress: $animationInProgress'); + printlog(' canBeResumed: $canBeResumed'); printlog(' Base data'); board.dump(); printlog(' Game data'); @@ -113,6 +107,7 @@ class Activity { printlog(' progress: $progress'); printlog(' progressTotal: $progressTotal'); printlog(' progressDelta: $progressDelta'); + printlog(' canBeResumed: $canBeResumed'); printlog(' gameWon: $gameWon'); printlog(''); } @@ -126,7 +121,6 @@ class Activity { return <String, dynamic>{ // Settings 'activitySettings': activitySettings.toJson(), - 'globalSettings': globalSettings.toJson(), // State 'isRunning': isRunning, 'isStarted': isStarted, diff --git a/lib/models/activity/board.dart b/lib/models/activity/board.dart index 2b75738bf4d1d0f645d655b04ac0d4254f6ee19f..374e9a3aec6e7c8c5647934a037285328fe2e4ce 100644 --- a/lib/models/activity/board.dart +++ b/lib/models/activity/board.dart @@ -2,8 +2,8 @@ import 'dart:math'; import 'package:flutter_custom_toolbox/flutter_toolbox.dart'; +import 'package:colors/config/application_config.dart'; import 'package:colors/models/activity/cell.dart'; -import 'package:colors/models/settings/settings_activity.dart'; typedef BoardCells = List<List<Cell>>; @@ -19,8 +19,10 @@ class Board { } factory Board.createRandom(ActivitySettings activitySettings) { - final int boardSizeHorizontal = activitySettings.boardSize; - final int boardSizeVertical = activitySettings.boardSize; + final int boardSizeHorizontal = + activitySettings.getAsInt(ApplicationConfig.parameterCodeBoardSize); + final int boardSizeVertical = + activitySettings.getAsInt(ApplicationConfig.parameterCodeBoardSize); final rand = Random(); @@ -28,7 +30,9 @@ class Board { for (int rowIndex = 0; rowIndex < boardSizeVertical; rowIndex++) { List<Cell> row = []; for (int colIndex = 0; colIndex < boardSizeHorizontal; colIndex++) { - final int value = 1 + rand.nextInt(activitySettings.colorsCount); + final int value = 1 + + rand.nextInt( + activitySettings.getAsInt(ApplicationConfig.parameterCodeColorsCount)); row.add(Cell(value)); } cells.add(row); diff --git a/lib/models/settings/settings_activity.dart b/lib/models/settings/settings_activity.dart deleted file mode 100644 index ca18387f024459935cedd7f833d2d5caf6bd1ceb..0000000000000000000000000000000000000000 --- a/lib/models/settings/settings_activity.dart +++ /dev/null @@ -1,82 +0,0 @@ -import 'package:flutter_custom_toolbox/flutter_toolbox.dart'; - -import 'package:colors/config/default_activity_settings.dart'; - -class ActivitySettings { - String difficultyLevel; - String parameterSize; - String parameterColorsCount; - - ActivitySettings({ - required this.difficultyLevel, - required this.parameterSize, - required this.parameterColorsCount, - }); - - static String getLevelValueFromUnsafe(String level) { - if (DefaultActivitySettings.allowedDifficultyLevelValues.contains(level)) { - return level; - } - - return DefaultActivitySettings.defaultDifficultyLevelValue; - } - - static String getSizeValueFromUnsafe(String size) { - if (DefaultActivitySettings.allowedBoardSizeValues.contains(size)) { - return size; - } - - return DefaultActivitySettings.defaultBoardSizeValue; - } - - static String getColorsValueFromUnsafe(String colors) { - if (DefaultActivitySettings.allowedColorsCountValues.contains(colors)) { - return colors; - } - - return DefaultActivitySettings.defaultColorsCountValue; - } - - factory ActivitySettings.createDefault() { - return ActivitySettings( - difficultyLevel: DefaultActivitySettings.defaultDifficultyLevelValue, - parameterSize: DefaultActivitySettings.defaultBoardSizeValue, - parameterColorsCount: DefaultActivitySettings.defaultColorsCountValue, - ); - } - - int getBoardSizeFromParameter(String parameterSize) { - const Map<String, int> values = { - DefaultActivitySettings.boardSizeValueSmall: 6, - DefaultActivitySettings.boardSizeValueMedium: 10, - DefaultActivitySettings.boardSizeValueLarge: 14, - DefaultActivitySettings.boardSizeValueExtra: 20, - }; - return values[parameterSize] ?? - getBoardSizeFromParameter(DefaultActivitySettings.defaultBoardSizeValue); - } - - int get boardSize => getBoardSizeFromParameter(parameterSize); - int get colorsCount => int.parse(parameterColorsCount); - - void dump() { - printlog('$ActivitySettings:'); - printlog(' ${DefaultActivitySettings.parameterCodeDifficultyLevel}: $difficultyLevel'); - printlog(' ${DefaultActivitySettings.parameterCodeBoardSize}: $parameterSize'); - printlog(' ${DefaultActivitySettings.parameterCodeColorsCount}: $parameterColorsCount'); - printlog(''); - } - - @override - String toString() { - return '$ActivitySettings(${toJson()})'; - } - - Map<String, dynamic>? toJson() { - return <String, dynamic>{ - DefaultActivitySettings.parameterCodeDifficultyLevel: difficultyLevel, - DefaultActivitySettings.parameterCodeBoardSize: parameterSize, - DefaultActivitySettings.parameterCodeColorsCount: parameterColorsCount, - }; - } -} diff --git a/lib/models/settings/settings_global.dart b/lib/models/settings/settings_global.dart deleted file mode 100644 index 37a4a8ca6e34b17464a456a620df8934e0b1c877..0000000000000000000000000000000000000000 --- a/lib/models/settings/settings_global.dart +++ /dev/null @@ -1,42 +0,0 @@ -import 'package:flutter_custom_toolbox/flutter_toolbox.dart'; - -import 'package:colors/config/default_global_settings.dart'; - -class GlobalSettings { - String skin; - - GlobalSettings({ - required this.skin, - }); - - static String getSkinValueFromUnsafe(String skin) { - if (DefaultGlobalSettings.allowedSkinValues.contains(skin)) { - return skin; - } - - return DefaultGlobalSettings.defaultSkinValue; - } - - factory GlobalSettings.createDefault() { - return GlobalSettings( - skin: DefaultGlobalSettings.defaultSkinValue, - ); - } - - void dump() { - printlog('$GlobalSettings: '); - printlog(' ${DefaultGlobalSettings.parameterCodeSkin}: $skin'); - printlog(''); - } - - @override - String toString() { - return '$GlobalSettings(${toJson()})'; - } - - Map<String, dynamic>? toJson() { - return <String, dynamic>{ - DefaultGlobalSettings.parameterCodeSkin: skin, - }; - } -} diff --git a/lib/common/ui/pages/game.dart b/lib/ui/pages/game.dart similarity index 100% rename from lib/common/ui/pages/game.dart rename to lib/ui/pages/game.dart diff --git a/lib/ui/painters/board_painter.dart b/lib/ui/painters/board_painter.dart index 1dfcfc8b9bfaa7de0707bad634e405a35fb955bb..16e0b4ed4973e3555c066b844c23233d89bf7ceb 100644 --- a/lib/ui/painters/board_painter.dart +++ b/lib/ui/painters/board_painter.dart @@ -1,6 +1,8 @@ import 'package:flutter/material.dart'; -import 'package:colors/config/color_theme.dart'; +import 'package:colors/common/utils/color_theme_utils.dart'; + +import 'package:colors/config/application_config.dart'; import 'package:colors/models/activity/board.dart'; import 'package:colors/models/activity/cell.dart'; import 'package:colors/models/activity/activity.dart'; @@ -16,7 +18,8 @@ class BoardPainter extends CustomPainter { @override void paint(Canvas canvas, Size size) { - final int boardSize = activity.activitySettings.boardSize; + final int boardSize = + activity.activitySettings.getAsInt(ApplicationConfig.parameterCodeBoardSize); final BoardCells cells = activity.board.cells; final double cellSize = size.width / boardSize; const double borderSize = 3; @@ -29,7 +32,8 @@ class BoardPainter extends CustomPainter { final Cell cell = cells[row][col]; final int cellValue = cell.value; - final int colorCode = ColorTheme.getColorCode(activity.globalSettings.skin, cellValue); + final int colorCode = ColorThemeUtils.getColorCode(cellValue, + activity.activitySettings.get(ApplicationConfig.parameterCodeColorTheme)); final cellPaintBackground = Paint(); cellPaintBackground.color = Color(colorCode); diff --git a/lib/ui/parameters/parameter_painter_board_size.dart b/lib/ui/parameters/parameter_painter_board_size.dart new file mode 100644 index 0000000000000000000000000000000000000000..d953e34d4e6a34b0eb0fc088a32a0a1ae631e1c3 --- /dev/null +++ b/lib/ui/parameters/parameter_painter_board_size.dart @@ -0,0 +1,80 @@ +import 'dart:math'; + +import 'package:flutter/material.dart'; +import 'package:flutter_custom_toolbox/flutter_toolbox.dart'; + +import 'package:colors/common/utils/color_theme_utils.dart'; +import 'package:colors/config/application_config.dart'; + +class ParameterPainterBoardSize extends CustomPainter { + const ParameterPainterBoardSize({ + required this.context, + required this.value, + }); + + final BuildContext context; + final String value; + + @override + void paint(Canvas canvas, Size size) { + // force square + final double canvasSize = min(size.width, size.height); + + final ActivitySettings activitySettings = + BlocProvider.of<ActivitySettingsCubit>(context).state.settings; + + int gridWidth = 1; + + switch (value) { + case ApplicationConfig.boardSizeValueSmall: + gridWidth = 2; + break; + case ApplicationConfig.boardSizeValueMedium: + gridWidth = 3; + break; + case ApplicationConfig.boardSizeValueLarge: + gridWidth = 4; + break; + case ApplicationConfig.boardSizeValueExtraLarge: + gridWidth = 5; + break; + default: + printlog('Wrong value for boardSize parameter value: $value'); + } + + final paint = Paint(); + paint.strokeJoin = StrokeJoin.round; + paint.strokeWidth = 3 / 100 * canvasSize; + + // Mini grid + final borderColor = Colors.grey.shade800; + + final double cellSize = canvasSize / 7; + final double origin = (canvasSize - gridWidth * cellSize) / 2; + + final String colorTheme = activitySettings.get(ApplicationConfig.parameterCodeColorTheme); + + for (int row = 0; row < gridWidth; row++) { + for (int col = 0; col < gridWidth; col++) { + final Offset topLeft = Offset(origin + col * cellSize, origin + row * cellSize); + final Offset bottomRight = topLeft + Offset(cellSize, cellSize); + + final squareColor = + Color(ColorThemeUtils.getColorCode(col + row * gridWidth, colorTheme)); + + paint.color = squareColor; + paint.style = PaintingStyle.fill; + canvas.drawRect(Rect.fromPoints(topLeft, bottomRight), paint); + + paint.color = borderColor; + paint.style = PaintingStyle.stroke; + canvas.drawRect(Rect.fromPoints(topLeft, bottomRight), paint); + } + } + } + + @override + bool shouldRepaint(CustomPainter oldDelegate) { + return false; + } +} diff --git a/lib/ui/parameters/parameter_painter_color_theme.dart b/lib/ui/parameters/parameter_painter_color_theme.dart new file mode 100644 index 0000000000000000000000000000000000000000..5f6ddbe40ec9d62228edf00e8a0c52a0ec75b8c2 --- /dev/null +++ b/lib/ui/parameters/parameter_painter_color_theme.dart @@ -0,0 +1,55 @@ +import 'dart:math'; + +import 'package:flutter/material.dart'; + +import 'package:colors/common/utils/color_theme_utils.dart'; + +class ParameterPainterColorTheme extends CustomPainter { + const ParameterPainterColorTheme({ + required this.context, + required this.value, + }); + + final BuildContext context; + final String value; + + @override + void paint(Canvas canvas, Size size) { + // force square + final double canvasSize = min(size.width, size.height); + + const int gridWidth = 4; + + final paint = Paint(); + paint.strokeJoin = StrokeJoin.round; + paint.strokeWidth = 3 / 100 * canvasSize; + + // Mini grid + final borderColor = Colors.grey.shade800; + + final double cellSize = canvasSize / gridWidth; + final double origin = (canvasSize - gridWidth * cellSize) / 2; + + for (int row = 0; row < gridWidth; row++) { + for (int col = 0; col < gridWidth; col++) { + final Offset topLeft = Offset(origin + col * cellSize, origin + row * cellSize); + final Offset bottomRight = topLeft + Offset(cellSize, cellSize); + + final squareColor = Color(ColorThemeUtils.getColorCode(col + row * gridWidth, value)); + + paint.color = squareColor; + paint.style = PaintingStyle.fill; + canvas.drawRect(Rect.fromPoints(topLeft, bottomRight), paint); + + paint.color = borderColor; + paint.style = PaintingStyle.stroke; + canvas.drawRect(Rect.fromPoints(topLeft, bottomRight), paint); + } + } + } + + @override + bool shouldRepaint(CustomPainter oldDelegate) { + return false; + } +} diff --git a/lib/ui/parameters/parameter_painter_colors_count.dart b/lib/ui/parameters/parameter_painter_colors_count.dart new file mode 100644 index 0000000000000000000000000000000000000000..e8b296b5f0b452e45d92e0ff36250be4242f6c08 --- /dev/null +++ b/lib/ui/parameters/parameter_painter_colors_count.dart @@ -0,0 +1,96 @@ +import 'dart:math'; + +import 'package:flutter/material.dart'; +import 'package:flutter_custom_toolbox/flutter_toolbox.dart'; + +import 'package:colors/common/utils/color_theme_utils.dart'; +import 'package:colors/config/application_config.dart'; + +class ParameterPainterColorsCount extends CustomPainter { + const ParameterPainterColorsCount({ + required this.context, + required this.value, + }); + + final BuildContext context; + final String value; + + @override + void paint(Canvas canvas, Size size) { + // force square + final double canvasSize = min(size.width, size.height); + + final ActivitySettings activitySettings = + BlocProvider.of<ActivitySettingsCubit>(context).state.settings; + + final paint = Paint(); + paint.strokeJoin = StrokeJoin.round; + paint.strokeWidth = 3; + + // Colors preview + const List<Offset> positions = [ + Offset(0, 0), + Offset(1, 0), + Offset(2, 0), + Offset(2, 1), + Offset(2, 2), + Offset(1, 2), + Offset(0, 2), + Offset(0, 1), + ]; + + final double padding = 4 / 100 * canvasSize; + final double margin = 3 / 100 * canvasSize; + final double width = ((canvasSize - 2 * padding) / 3) - 2 * margin; + + final colorsCount = int.parse(value); + + for (int colorIndex = 0; colorIndex < colorsCount; colorIndex++) { + final Offset position = positions[colorIndex]; + + final Offset topLeft = Offset(padding + margin + position.dx * (width + 2 * margin), + padding + margin + position.dy * (width + 2 * margin)); + + final Offset bottomRight = topLeft + Offset(width, width); + + final squareColor = Color(ColorThemeUtils.getColorCode( + colorIndex, activitySettings.get(ApplicationConfig.parameterCodeColorTheme))); + paint.color = squareColor; + paint.style = PaintingStyle.fill; + canvas.drawRect(Rect.fromPoints(topLeft, bottomRight), paint); + + final borderColor = squareColor.darken(20); + paint.color = borderColor; + paint.style = PaintingStyle.stroke; + canvas.drawRect(Rect.fromPoints(topLeft, bottomRight), paint); + } + + // centered text value + final textSpan = TextSpan( + text: value.toString(), + style: TextStyle( + color: Colors.black, + fontSize: canvasSize / 4, + fontWeight: FontWeight.bold, + ), + ); + final textPainter = TextPainter( + text: textSpan, + textDirection: TextDirection.ltr, + textAlign: TextAlign.center, + ); + textPainter.layout(); + textPainter.paint( + canvas, + Offset( + (canvasSize - textPainter.width) * 0.5, + (canvasSize - textPainter.height) * 0.5, + ), + ); + } + + @override + bool shouldRepaint(CustomPainter oldDelegate) { + return false; + } +} diff --git a/lib/ui/parameters/parameter_painter_difficulty_level.dart b/lib/ui/parameters/parameter_painter_difficulty_level.dart new file mode 100644 index 0000000000000000000000000000000000000000..70625baababbbde3a35ec0c3fb61c3943ada2c84 --- /dev/null +++ b/lib/ui/parameters/parameter_painter_difficulty_level.dart @@ -0,0 +1,82 @@ +import 'dart:math'; + +import 'package:flutter/material.dart'; +import 'package:flutter_custom_toolbox/flutter_toolbox.dart'; + +import 'package:colors/config/application_config.dart'; + +class ParameterPainterDifficultyLevel extends CustomPainter { + const ParameterPainterDifficultyLevel({ + required this.context, + required this.value, + }); + + final BuildContext context; + final String value; + + @override + void paint(Canvas canvas, Size size) { + // force square + final double canvasSize = min(size.width, size.height); + + final List<dynamic> stars = []; + + switch (value) { + case ApplicationConfig.difficultyLevelValueEasy: + stars.add([0.5, 0.5]); + break; + case ApplicationConfig.difficultyLevelValueMedium: + stars.add([0.3, 0.5]); + stars.add([0.7, 0.5]); + break; + case ApplicationConfig.difficultyLevelValueHard: + stars.add([0.3, 0.3]); + stars.add([0.7, 0.3]); + stars.add([0.5, 0.7]); + break; + case ApplicationConfig.difficultyLevelValueNightmare: + stars.add([0.3, 0.3]); + stars.add([0.7, 0.3]); + stars.add([0.3, 0.7]); + stars.add([0.7, 0.7]); + break; + default: + printlog('Wrong value for level parameter value: $value'); + } + + final paint = Paint(); + paint.strokeJoin = StrokeJoin.round; + paint.strokeWidth = 3 / 100 * canvasSize; + + // Stars + final textSpan = TextSpan( + text: '⭐', + style: TextStyle( + color: Colors.black, + fontSize: canvasSize / 3, + fontWeight: FontWeight.bold, + ), + ); + final textPainter = TextPainter( + text: textSpan, + textDirection: TextDirection.ltr, + textAlign: TextAlign.center, + ); + textPainter.layout(); + + for (var center in stars) { + textPainter.paint( + canvas, + Offset( + canvasSize * center[0] - textPainter.width * 0.5, + canvasSize * center[1] - textPainter.height * 0.5, + ), + ); + } + } + + @override + bool shouldRepaint(CustomPainter oldDelegate) { + return false; + } +} diff --git a/lib/ui/widgets/game/cell.dart b/lib/ui/widgets/game/cell.dart index 1a7525baacd58c8d45eb9dd582a1d8fd46c804f5..d2997eb93ae9dfb0d8b089c5f99247b1b7cd6805 100644 --- a/lib/ui/widgets/game/cell.dart +++ b/lib/ui/widgets/game/cell.dart @@ -1,7 +1,9 @@ import 'package:flutter/material.dart'; import 'package:flutter_custom_toolbox/flutter_toolbox.dart'; -import 'package:colors/config/color_theme.dart'; +import 'package:colors/common/utils/color_theme_utils.dart'; + +import 'package:colors/config/application_config.dart'; import 'package:colors/cubit/activity/activity_cubit.dart'; import 'package:colors/models/activity/cell.dart'; import 'package:colors/models/activity/activity.dart'; @@ -24,8 +26,9 @@ class CellWidget extends StatelessWidget { final ColorScheme colorScheme = Theme.of(context).colorScheme; - final String skin = currentActivity.globalSettings.skin; - final squareColor = Color(ColorTheme.getColorCode(skin, cell.value)); + final String colorTheme = + currentActivity.activitySettings.get(ApplicationConfig.parameterCodeColorTheme); + final squareColor = Color(ColorThemeUtils.getColorCode(cell.value, colorTheme)); return Container( decoration: BoxDecoration( diff --git a/lib/ui/widgets/game/game_board.dart b/lib/ui/widgets/game/game_board.dart index 87d989127dc21bd81c91a62449b48df5276cc820..ed18a7770bbf1c3a72272622e673b473c5226090 100644 --- a/lib/ui/widgets/game/game_board.dart +++ b/lib/ui/widgets/game/game_board.dart @@ -1,3 +1,4 @@ +import 'package:colors/config/application_config.dart'; import 'package:flutter/material.dart'; import 'package:flutter_custom_toolbox/flutter_toolbox.dart'; @@ -19,7 +20,8 @@ class GameBoardWidget extends StatelessWidget { onTapUp: (details) { final double xTap = details.localPosition.dx; final double yTap = details.localPosition.dy; - final int boardSize = currentActivity.activitySettings.boardSize; + final int boardSize = currentActivity.activitySettings + .getAsInt(ApplicationConfig.parameterCodeBoardSize); final int col = xTap ~/ (boardWidth / boardSize); final int row = yTap ~/ (boardWidth / boardSize); final int cellValue = currentActivity.board.getCellValue(col, row); diff --git a/lib/ui/widgets/game/select_color_bar.dart b/lib/ui/widgets/game/select_color_bar.dart index 5020f0beaf02e9cc6a1d066426e25a0837eec577..3792b87ea73a17a96ecbd6f6451325e665bc5385 100644 --- a/lib/ui/widgets/game/select_color_bar.dart +++ b/lib/ui/widgets/game/select_color_bar.dart @@ -1,6 +1,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_custom_toolbox/flutter_toolbox.dart'; +import 'package:colors/config/application_config.dart'; import 'package:colors/cubit/activity/activity_cubit.dart'; import 'package:colors/models/activity/cell.dart'; import 'package:colors/models/activity/activity.dart'; @@ -15,7 +16,8 @@ class SelectColorBar extends StatelessWidget { builder: (BuildContext context, ActivityState activityState) { final Activity currentActivity = activityState.currentActivity; - final int colorsCount = currentActivity.activitySettings.colorsCount; + final int colorsCount = currentActivity.activitySettings + .getAsInt(ApplicationConfig.parameterCodeColorsCount); final double blockWidth = MediaQuery.of(context).size.width; final double itemWidth = blockWidth / colorsCount; diff --git a/pubspec.lock b/pubspec.lock index 1896dfc3582bc30a9743cfeb6b5a0e3e3b46fcd3..0d7744cbc920c4c2cb00c639e11ef7197325b30e 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -122,11 +122,11 @@ packages: dependency: "direct main" description: path: "." - ref: "0.4.0" - resolved-ref: eb9c090bd00d73324eab8737f74b3339cc24c9e8 + ref: "0.5.0" + resolved-ref: b8164a50489ba981ea57d9f02e2334f09cb8c6a7 url: "https://git.harrault.fr/android/flutter-toolbox.git" source: git - version: "0.4.0" + version: "0.5.0" flutter_lints: dependency: "direct dev" description: diff --git a/pubspec.yaml b/pubspec.yaml index a9a7dc51fbffc5aafeaf68405b7be39caf1e4c1c..f16826e1117e7ab5da0be791f1b7e1493ea4e67a 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -3,7 +3,7 @@ description: Fill the board, a colorfull game! publish_to: "none" -version: 0.4.2+50 +version: 0.5.0+51 environment: sdk: "^3.0.0" @@ -16,7 +16,7 @@ dependencies: flutter_custom_toolbox: git: url: https://git.harrault.fr/android/flutter-toolbox.git - ref: 0.4.0 + ref: 0.5.0 # specific # (none)