From 6912ee663eb241f973ffeaf4e91a096b0652cfaa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Beno=C3=AEt=20Harrault?= <benoit@harrault.fr> Date: Sat, 16 Nov 2024 15:17:28 +0100 Subject: [PATCH] Use ActivityParameters widgets from flutter_custom_toolbox --- lib/common/config/activity_page.dart | 65 ++++-- lib/common/ui/pages/parameters.dart | 171 --------------- .../ui/parameters/parameter_painter.dart | 196 ------------------ .../ui/parameters/parameter_widget.dart | 162 --------------- lib/config/application_config.dart | 94 ++++++++- lib/config/default_activity_settings.dart | 52 ----- lib/config/default_global_settings.dart | 28 --- lib/cubit/activity/activity_cubit.dart | 18 +- .../settings/settings_activity_cubit.dart | 72 ------- .../settings/settings_activity_state.dart | 15 -- lib/cubit/settings/settings_global_cubit.dart | 59 ------ lib/cubit/settings/settings_global_state.dart | 15 -- lib/main.dart | 13 +- lib/models/activity/activity.dart | 19 +- lib/models/activity/game_board.dart | 10 +- lib/models/settings/settings_activity.dart | 59 ------ lib/models/settings/settings_global.dart | 42 ---- .../parameter_painter_board_size.dart | 72 +++++++ .../parameter_painter_colors_count.dart | 88 ++++++++ lib/ui/widgets/game/game_board.dart | 16 +- lib/ui/widgets/game/game_score.dart | 3 +- pubspec.lock | 6 +- pubspec.yaml | 5 +- 23 files changed, 343 insertions(+), 937 deletions(-) delete mode 100644 lib/common/ui/pages/parameters.dart delete mode 100644 lib/common/ui/parameters/parameter_painter.dart delete mode 100644 lib/common/ui/parameters/parameter_widget.dart delete mode 100644 lib/config/default_activity_settings.dart delete mode 100644 lib/config/default_global_settings.dart delete mode 100644 lib/cubit/settings/settings_activity_cubit.dart delete mode 100644 lib/cubit/settings/settings_activity_state.dart delete mode 100644 lib/cubit/settings/settings_global_cubit.dart delete mode 100644 lib/cubit/settings/settings_global_state.dart delete mode 100644 lib/models/settings/settings_activity.dart delete mode 100644 lib/models/settings/settings_global.dart create mode 100644 lib/ui/parameters/parameter_painter_board_size.dart create mode 100644 lib/ui/parameters/parameter_painter_colors_count.dart diff --git a/lib/common/config/activity_page.dart b/lib/common/config/activity_page.dart index 847186e..ddaecdf 100644 --- a/lib/common/config/activity_page.dart +++ b/lib/common/config/activity_page.dart @@ -1,22 +1,26 @@ import 'package:flutter/material.dart'; import 'package:flutter_custom_toolbox/flutter_toolbox.dart'; + import 'package:random/common/ui/pages/api.dart'; import 'package:random/common/ui/pages/camera.dart'; import 'package:random/common/ui/pages/demo.dart'; +import 'package:random/common/ui/pages/game.dart'; import 'package:random/common/ui/pages/graph.dart'; -import 'package:random/common/ui/pages/game.dart'; -import 'package:random/common/ui/pages/parameters.dart'; +import 'package:random/config/application_config.dart'; + +import 'package:random/cubit/activity/activity_cubit.dart'; +import 'package:random/models/activity/activity.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, }); } @@ -24,48 +28,63 @@ class ActivityPage { static const bool displayBottomNavBar = true; static const indexHome = 0; - static const pageHome = ActivityPageItem( + static final 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 indexDemo = 1; - static const pageDemo = ActivityPageItem( + static final pageDemo = ActivityPageItem( code: 'page_demo', icon: Icon(UniconsLine.eye), - page: PageDemo(), + builder: ({required Activity currentActivity}) { + return PageDemo(); + }, ); static const indexGame = 2; - 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 indexCamera = 3; - static const pageCamera = ActivityPageItem( + static final pageCamera = ActivityPageItem( code: 'page_camera', icon: Icon(UniconsLine.camera), - page: PageCamera(), + builder: ({required Activity currentActivity}) { + return PageCamera(); + }, ); static const indexGraph = 4; - static const pageGraph = ActivityPageItem( + static final pageGraph = ActivityPageItem( code: 'page_graph', icon: Icon(UniconsLine.pen), - page: PageGraph(), + builder: ({required Activity currentActivity}) { + return PageGraph(); + }, ); static const indexApi = 5; - static const pageApi = ActivityPageItem( + static final pageApi = ActivityPageItem( code: 'page_api', icon: Icon(UniconsLine.link), - page: PageApi(), + builder: ({required Activity currentActivity}) { + return PageApi(); + }, ); - static const Map<int, ActivityPageItem> items = { + static final Map<int, ActivityPageItem> items = { indexHome: pageHome, indexDemo: pageDemo, indexGame: pageGame, @@ -81,6 +100,16 @@ class ActivityPage { } static Widget getWidget(int pageIndex) { - return items[pageIndex]?.page ?? pageHome.page; + 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); + } + }, + ); } } diff --git a/lib/common/ui/pages/parameters.dart b/lib/common/ui/pages/parameters.dart deleted file mode 100644 index cd3e185..0000000 --- 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:random/common/cubit/nav/nav_cubit_pages.dart'; -import 'package:random/common/ui/parameters/parameter_widget.dart'; - -import 'package:random/config/default_activity_settings.dart'; -import 'package:random/config/default_global_settings.dart'; -import 'package:random/cubit/activity/activity_cubit.dart'; -import 'package:random/cubit/settings/settings_activity_cubit.dart'; -import 'package:random/cubit/settings/settings_global_cubit.dart'; -import 'package:random/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 92a6c6a..0000000 --- a/lib/common/ui/parameters/parameter_painter.dart +++ /dev/null @@ -1,196 +0,0 @@ -import 'dart:math'; - -import 'package:flutter/material.dart'; -import 'package:flutter_custom_toolbox/flutter_toolbox.dart'; - -import 'package:random/config/default_activity_settings.dart'; -import 'package:random/models/settings/settings_activity.dart'; -import 'package:random/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.parameterCodeBoardSize: - paintBoardSizeParameterItem(canvas, canvasSize); - break; - case DefaultActivitySettings.parameterCodeColorsCount: - paintColorsCountParameterItem(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 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.boardSizeValueExtraLarge: - 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), - ]; - - 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 = Colors.pink; - 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, - ), - ); - } -} diff --git a/lib/common/ui/parameters/parameter_widget.dart b/lib/common/ui/parameters/parameter_widget.dart deleted file mode 100644 index cec3d7b..0000000 --- a/lib/common/ui/parameters/parameter_widget.dart +++ /dev/null @@ -1,162 +0,0 @@ -import 'package:flutter/material.dart'; -import 'package:flutter_custom_toolbox/flutter_toolbox.dart'; - -import 'package:random/common/ui/parameters/parameter_painter.dart'; - -import 'package:random/config/default_activity_settings.dart'; -import 'package:random/config/default_global_settings.dart'; -import 'package:random/models/settings/settings_activity.dart'; -import 'package:random/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.parameterCodeBoardSize: - content = getBoardSizeParameterItem(); - break; - case DefaultActivitySettings.parameterCodeColorsCount: - content = getColorsCountParameterItem(); - break; - case DefaultGlobalSettings.parameterCodeSkin: - content = getSkinParameterItem(); - 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 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.boardSizeValueExtraLarge: - backgroundColor = Colors.purple; - break; - default: - printlog('Wrong value for size 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.colorsCountVeryLow: - backgroundColor = Colors.green; - break; - case DefaultActivitySettings.colorsCountLow: - backgroundColor = Colors.orange; - break; - case DefaultActivitySettings.colorsCountMedium: - backgroundColor = Colors.red; - break; - case DefaultActivitySettings.colorsCountHigh: - 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 getSkinParameterItem() { - Color backgroundColor = Colors.grey; - - return StyledButton( - color: backgroundColor, - onPressed: onPressed, - child: Text('skin: $value'), - ); - } -} diff --git a/lib/config/application_config.dart b/lib/config/application_config.dart index 8d0a234..191d5f2 100644 --- a/lib/config/application_config.dart +++ b/lib/config/application_config.dart @@ -1,3 +1,95 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_custom_toolbox/flutter_toolbox.dart'; + +import 'package:random/common/cubit/nav/nav_cubit_pages.dart'; + +import 'package:random/cubit/activity/activity_cubit.dart'; +import 'package:random/ui/parameters/parameter_painter_board_size.dart'; +import 'package:random/ui/parameters/parameter_painter_colors_count.dart'; + class ApplicationConfig { - static const String appTitle = 'Random application'; + static const String parameterCodeBoardSize = 'boardSize'; + static const String parameterCodeColorsCount = 'colorsCount'; + + static const String boardSizeValueSmall = '6'; + static const String boardSizeValueMedium = '10'; + static const String boardSizeValueLarge = '16'; + static const String boardSizeValueExtraLarge = '24'; + + static const String colorsCountVeryLow = '4'; + static const String colorsCountLow = '5'; + static const String colorsCountMedium = '6'; + static const String colorsCountHigh = '7'; + + static final ApplicationConfigDefinition config = ApplicationConfigDefinition( + appTitle: 'Random application', + activitySettings: [ + // 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) => ParameterPainterBoardSize( + context: context, + value: value, + ), + ), + + // colors count + ApplicationSettingsParameter( + code: parameterCodeColorsCount, + values: [ + ApplicationSettingsParameterItemValue( + value: colorsCountVeryLow, + color: Colors.green, + ), + ApplicationSettingsParameterItemValue( + value: colorsCountLow, + color: Colors.orange, + ), + ApplicationSettingsParameterItemValue( + value: colorsCountMedium, + color: Colors.red, + isDefault: true, + ), + ApplicationSettingsParameterItemValue( + value: colorsCountHigh, + color: Colors.purple, + ), + ], + customPainter: (context, value) => ParameterPainterColorsCount( + context: context, + value: value, + ), + ), + ], + startNewActivity: (BuildContext context) { + BlocProvider.of<ActivityCubit>(context).startNewActivity(context); + BlocProvider.of<NavCubitPage>(context).goToPageGame(); + }, + deleteCurrentActivity: (BuildContext context) { + BlocProvider.of<ActivityCubit>(context).deleteSavedActivity(); + }, + resumeActivity: (BuildContext context) { + BlocProvider.of<ActivityCubit>(context).resumeSavedActivity(); + BlocProvider.of<NavCubitPage>(context).goToPageGame(); + }, + ); } diff --git a/lib/config/default_activity_settings.dart b/lib/config/default_activity_settings.dart deleted file mode 100644 index 5f34d9d..0000000 --- a/lib/config/default_activity_settings.dart +++ /dev/null @@ -1,52 +0,0 @@ -import 'package:flutter_custom_toolbox/flutter_toolbox.dart'; - -class DefaultActivitySettings { - // available game parameters codes - static const String parameterCodeBoardSize = 'boardSize'; - static const String parameterCodeColorsCount = 'colorsCount'; - static const List<String> availableParameters = [ - parameterCodeBoardSize, - parameterCodeColorsCount, - ]; - - // board size: available values - static const String boardSizeValueSmall = '6'; - static const String boardSizeValueMedium = '10'; - static const String boardSizeValueLarge = '16'; - static const String boardSizeValueExtraLarge = '24'; - static const List<String> allowedBoardSizeValues = [ - boardSizeValueSmall, - boardSizeValueMedium, - boardSizeValueLarge, - boardSizeValueExtraLarge, - ]; - // board size: default value - static const String defaultBoardSizeValue = boardSizeValueLarge; - - // colors count: available values - static const String colorsCountVeryLow = '4'; - static const String colorsCountLow = '5'; - static const String colorsCountMedium = '6'; - static const String colorsCountHigh = '7'; - static const List<String> allowedColorsCountValues = [ - colorsCountVeryLow, - colorsCountLow, - colorsCountMedium, - colorsCountHigh, - ]; - // colors count: default value - static const String defaultColorsCountValue = colorsCountMedium; - - // available values from parameter code - static List<String> getAvailableValues(String parameterCode) { - switch (parameterCode) { - case parameterCodeBoardSize: - return DefaultActivitySettings.allowedBoardSizeValues; - case parameterCodeColorsCount: - return DefaultActivitySettings.allowedColorsCountValues; - } - - printlog('Did not find any available value for game parameter "$parameterCode".'); - return []; - } -} diff --git a/lib/config/default_global_settings.dart b/lib/config/default_global_settings.dart deleted file mode 100644 index d92229c..0000000 --- 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 skinValueDefault = 'default'; - static const List<String> allowedSkinValues = [ - skinValueDefault, - ]; - // skin: default value - static const String defaultSkinValue = skinValueDefault; - - // 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 5fc69c6..f347162 100644 --- a/lib/cubit/activity/activity_cubit.dart +++ b/lib/cubit/activity/activity_cubit.dart @@ -2,8 +2,6 @@ import 'package:flutter/material.dart'; import 'package:flutter_custom_toolbox/flutter_toolbox.dart'; import 'package:random/models/activity/activity.dart'; -import 'package:random/models/settings/settings_activity.dart'; -import 'package:random/models/settings/settings_global.dart'; part 'activity_state.dart'; @@ -22,7 +20,6 @@ class ActivityCubit extends HydratedCubit<ActivityState> { void refresh() { final Activity activity = Activity( activitySettings: state.currentActivity.activitySettings, - globalSettings: state.currentActivity.globalSettings, isRunning: state.currentActivity.isRunning, board: state.currentActivity.board, ); @@ -31,14 +28,13 @@ class ActivityCubit extends HydratedCubit<ActivityState> { 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(); @@ -47,6 +43,10 @@ class ActivityCubit extends HydratedCubit<ActivityState> { refresh(); } + bool canBeResumed() { + return state.currentActivity.canBeResumed; + } + void quitActivity() { state.currentActivity.isRunning = false; refresh(); diff --git a/lib/cubit/settings/settings_activity_cubit.dart b/lib/cubit/settings/settings_activity_cubit.dart deleted file mode 100644 index d404017..0000000 --- a/lib/cubit/settings/settings_activity_cubit.dart +++ /dev/null @@ -1,72 +0,0 @@ -import 'package:flutter/material.dart'; -import 'package:flutter_custom_toolbox/flutter_toolbox.dart'; - -import 'package:random/config/default_activity_settings.dart'; -import 'package:random/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( - boardSize: itemsCount ?? state.settings.boardSize, - colorsCount: timerValue ?? state.settings.colorsCount, - ), - ), - ); - } - - String getParameterValue(String code) { - switch (code) { - case DefaultActivitySettings.parameterCodeBoardSize: - return ActivitySettings.getItemsCountValueFromUnsafe(state.settings.boardSize); - case DefaultActivitySettings.parameterCodeColorsCount: - return ActivitySettings.getTimerValueFromUnsafe(state.settings.colorsCount); - } - - return ''; - } - - void setParameterValue(String code, String value) { - final String itemsCount = code == DefaultActivitySettings.parameterCodeBoardSize - ? value - : getParameterValue(DefaultActivitySettings.parameterCodeBoardSize); - final String timerValue = code == DefaultActivitySettings.parameterCodeColorsCount - ? value - : getParameterValue(DefaultActivitySettings.parameterCodeColorsCount); - - setValues( - itemsCount: itemsCount, - timerValue: timerValue, - ); - } - - @override - ActivitySettingsState? fromJson(Map<String, dynamic> json) { - final String itemsCount = json[DefaultActivitySettings.parameterCodeBoardSize] as String; - final String timerValue = json[DefaultActivitySettings.parameterCodeColorsCount] as String; - - return ActivitySettingsState( - settings: ActivitySettings( - boardSize: itemsCount, - colorsCount: timerValue, - ), - ); - } - - @override - Map<String, dynamic>? toJson(ActivitySettingsState state) { - return <String, dynamic>{ - DefaultActivitySettings.parameterCodeBoardSize: state.settings.boardSize, - DefaultActivitySettings.parameterCodeColorsCount: state.settings.colorsCount, - }; - } -} diff --git a/lib/cubit/settings/settings_activity_state.dart b/lib/cubit/settings/settings_activity_state.dart deleted file mode 100644 index 2b2de42..0000000 --- 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 0353c6b..0000000 --- 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:random/config/default_global_settings.dart'; -import 'package:random/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 ebcddd7..0000000 --- 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 a40d00d..dceb87d 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -8,12 +8,12 @@ import 'package:random/common/cubit/nav/nav_cubit_pages.dart'; import 'package:random/common/cubit/nav/nav_cubit_screens.dart'; import 'package:random/config/application_config.dart'; + +import 'package:random/cubit/settings/settings_cubit.dart'; import 'package:random/cubit/activity/activity_cubit.dart'; import 'package:random/cubit/activity/api_cubit.dart'; import 'package:random/cubit/activity/data_cubit.dart'; -import 'package:random/cubit/settings/settings_activity_cubit.dart'; -import 'package:random/cubit/settings/settings_cubit.dart'; -import 'package:random/cubit/settings/settings_global_cubit.dart'; + import 'package:random/network/api.dart'; import 'package:random/repository/api.dart'; import 'package:random/ui/skeleton.dart'; @@ -61,11 +61,8 @@ 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), ), // custom providers @@ -89,7 +86,7 @@ class MyApp extends StatelessWidget { 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 c3d4875..f244830 100644 --- a/lib/models/activity/activity.dart +++ b/lib/models/activity/activity.dart @@ -2,15 +2,13 @@ import 'dart:math'; import 'package:flutter_custom_toolbox/flutter_toolbox.dart'; +import 'package:random/config/application_config.dart'; import 'package:random/models/activity/game_board.dart'; import 'package:random/models/activity/game_cell.dart'; -import 'package:random/models/settings/settings_activity.dart'; -import 'package:random/models/settings/settings_global.dart'; class Activity { GameBoard board; ActivitySettings activitySettings; - GlobalSettings globalSettings; bool isRunning = false; bool isFinished = false; int availableBlocksCount = 0; @@ -20,30 +18,27 @@ class Activity { Activity({ required this.board, required this.activitySettings, - required this.globalSettings, this.isRunning = false, }); factory Activity.createNull() { return Activity( + // Settings + activitySettings: ActivitySettings.createDefault(appConfig: ApplicationConfig.config), + // Base data board: GameBoard.createNull(), - activitySettings: ActivitySettings.createDefault(), - globalSettings: GlobalSettings.createDefault(), ); } factory Activity.createNew({ ActivitySettings? activitySettings, - GlobalSettings? globalSettings, }) { - ActivitySettings newActivitySettings = - activitySettings ?? ActivitySettings.createDefault(); - GlobalSettings newGlobalSettings = globalSettings ?? GlobalSettings.createDefault(); + ActivitySettings newActivitySettings = activitySettings ?? + ActivitySettings.createDefault(appConfig: ApplicationConfig.config); return Activity( board: GameBoard.createRandom(newActivitySettings), activitySettings: newActivitySettings, - globalSettings: newGlobalSettings, isRunning: true, ); } @@ -68,7 +63,7 @@ class Activity { } void setRandomCellValue(int x, int y, ActivitySettings settings) { - final int maxValue = settings.colorsCountValue; + final int maxValue = settings.getAsInt(ApplicationConfig.parameterCodeColorsCount); final rand = Random(); int value = 1 + rand.nextInt(maxValue); diff --git a/lib/models/activity/game_board.dart b/lib/models/activity/game_board.dart index d5854f8..df1ba42 100644 --- a/lib/models/activity/game_board.dart +++ b/lib/models/activity/game_board.dart @@ -2,8 +2,8 @@ import 'dart:math'; import 'package:flutter_custom_toolbox/flutter_toolbox.dart'; +import 'package:random/config/application_config.dart'; import 'package:random/models/activity/game_cell.dart'; -import 'package:random/models/settings/settings_activity.dart'; class GameBoard { final List<List<GameCell>> cells; @@ -17,9 +17,11 @@ class GameBoard { } factory GameBoard.createRandom(ActivitySettings activitySettings) { - final int boardSizeHorizontal = activitySettings.boardSizeValue; - final int boardSizeVertical = activitySettings.boardSizeValue; - final int maxValue = activitySettings.colorsCountValue; + final int boardSizeHorizontal = + activitySettings.getAsInt(ApplicationConfig.parameterCodeBoardSize); + final int boardSizeVertical = + activitySettings.getAsInt(ApplicationConfig.parameterCodeBoardSize); + final int maxValue = activitySettings.getAsInt(ApplicationConfig.parameterCodeColorsCount); final rand = Random(); diff --git a/lib/models/settings/settings_activity.dart b/lib/models/settings/settings_activity.dart deleted file mode 100644 index 4346eba..0000000 --- a/lib/models/settings/settings_activity.dart +++ /dev/null @@ -1,59 +0,0 @@ -import 'package:flutter_custom_toolbox/flutter_toolbox.dart'; - -import 'package:random/config/default_activity_settings.dart'; - -class ActivitySettings { - final String boardSize; - final String colorsCount; - - ActivitySettings({ - required this.boardSize, - required this.colorsCount, - }); - - // Getters to convert String to int - int get boardSizeValue => int.parse(boardSize); - int get colorsCountValue => int.parse(colorsCount); - - static String getItemsCountValueFromUnsafe(String itemsCount) { - if (DefaultActivitySettings.allowedBoardSizeValues.contains(itemsCount)) { - return itemsCount; - } - - return DefaultActivitySettings.defaultBoardSizeValue; - } - - static String getTimerValueFromUnsafe(String timerValue) { - if (DefaultActivitySettings.allowedColorsCountValues.contains(timerValue)) { - return timerValue; - } - - return DefaultActivitySettings.defaultColorsCountValue; - } - - factory ActivitySettings.createDefault() { - return ActivitySettings( - boardSize: DefaultActivitySettings.defaultBoardSizeValue, - colorsCount: DefaultActivitySettings.defaultColorsCountValue, - ); - } - - void dump() { - printlog('$ActivitySettings:'); - printlog(' ${DefaultActivitySettings.parameterCodeBoardSize}: $boardSize'); - printlog(' ${DefaultActivitySettings.parameterCodeColorsCount}: $colorsCount'); - printlog(''); - } - - @override - String toString() { - return '$ActivitySettings(${toJson()})'; - } - - Map<String, dynamic>? toJson() { - return <String, dynamic>{ - DefaultActivitySettings.parameterCodeBoardSize: boardSize, - DefaultActivitySettings.parameterCodeColorsCount: colorsCount, - }; - } -} diff --git a/lib/models/settings/settings_global.dart b/lib/models/settings/settings_global.dart deleted file mode 100644 index c8b1fd6..0000000 --- a/lib/models/settings/settings_global.dart +++ /dev/null @@ -1,42 +0,0 @@ -import 'package:flutter_custom_toolbox/flutter_toolbox.dart'; - -import 'package:random/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/ui/parameters/parameter_painter_board_size.dart b/lib/ui/parameters/parameter_painter_board_size.dart new file mode 100644 index 0000000..bcd75b1 --- /dev/null +++ b/lib/ui/parameters/parameter_painter_board_size.dart @@ -0,0 +1,72 @@ +import 'dart:math'; + +import 'package:flutter/material.dart'; +import 'package:flutter_custom_toolbox/flutter_toolbox.dart'; + +import 'package:random/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); + + 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 squareBackgroundColor = Colors.grey.shade200; + final squareBorderColor = Colors.grey.shade800; + + final double cellSize = canvasSize / 7; + 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); + + 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); + } + } + } + + @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 0000000..63e6028 --- /dev/null +++ b/lib/ui/parameters/parameter_painter_colors_count.dart @@ -0,0 +1,88 @@ +import 'dart:math'; + +import 'package:flutter/material.dart'; +import 'package:flutter_custom_toolbox/flutter_toolbox.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 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 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 = Colors.pink; + 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/widgets/game/game_board.dart b/lib/ui/widgets/game/game_board.dart index ad9d873..de1eaa0 100644 --- a/lib/ui/widgets/game/game_board.dart +++ b/lib/ui/widgets/game/game_board.dart @@ -1,9 +1,9 @@ import 'package:flutter/material.dart'; import 'package:flutter_custom_toolbox/flutter_toolbox.dart'; +import 'package:random/config/application_config.dart'; import 'package:random/cubit/activity/activity_cubit.dart'; import 'package:random/models/activity/activity.dart'; -import 'package:random/models/settings/settings_activity.dart'; import 'package:random/ui/painters/cell_painter.dart'; import 'package:random/ui/widgets/game/game_score.dart'; @@ -25,7 +25,7 @@ class _GameBoardWidget extends State<GameBoardWidget> with TickerProviderStateMi List<List<Animation<double>?>> animations = []; void resetAnimations(ActivitySettings activitySettings) { - final int boardSize = activitySettings.boardSizeValue; + final int boardSize = activitySettings.getAsInt(ApplicationConfig.parameterCodeBoardSize); animations = List.generate( boardSize, @@ -93,8 +93,10 @@ class _GameBoardWidget extends State<GameBoardWidget> with TickerProviderStateMi final double widgetWidth = widget.widgetSize.width; final double widgetHeight = widget.widgetSize.height; - final int rowsCount = widget.activity.activitySettings.boardSizeValue; - final int columnsCount = widget.activity.activitySettings.boardSizeValue; + final int rowsCount = + widget.activity.activitySettings.getAsInt(ApplicationConfig.parameterCodeBoardSize); + final int columnsCount = + widget.activity.activitySettings.getAsInt(ApplicationConfig.parameterCodeBoardSize); final double cellWidth = widgetWidth / columnsCount; final double cellHeight = widgetHeight / rowsCount; @@ -147,8 +149,10 @@ class _GameBoardWidget extends State<GameBoardWidget> with TickerProviderStateMi final double widgetWidth = widget.widgetSize.width; final double widgetHeight = widget.widgetSize.height; - final int rowsCount = widget.activity.activitySettings.boardSizeValue; - final int columnsCount = widget.activity.activitySettings.boardSizeValue; + final int rowsCount = + widget.activity.activitySettings.getAsInt(ApplicationConfig.parameterCodeBoardSize); + final int columnsCount = + widget.activity.activitySettings.getAsInt(ApplicationConfig.parameterCodeBoardSize); return GestureDetector( child: buildBoard(), diff --git a/lib/ui/widgets/game/game_score.dart b/lib/ui/widgets/game/game_score.dart index 13598e0..92903bd 100644 --- a/lib/ui/widgets/game/game_score.dart +++ b/lib/ui/widgets/game/game_score.dart @@ -20,8 +20,7 @@ class GameScoreWidget extends StatelessWidget { crossAxisAlignment: CrossAxisAlignment.start, children: [ const Text('Settings:'), - Text(' board size: ${activity.activitySettings.boardSize}'), - Text(' colors count: ${activity.activitySettings.colorsCount}'), + Text(' ${activity.activitySettings}'), const Text('Game:'), Text(' isRunning: ${activity.isRunning}'), Text(' isFinished: ${activity.isFinished}'), diff --git a/pubspec.lock b/pubspec.lock index 04f4656..e4df4c7 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -186,11 +186,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 1e44b8c..db5f1e8 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -3,7 +3,7 @@ description: A random application, for testing purpose only. publish_to: "none" -version: 1.3.2+73 +version: 1.4.0+74 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 camera: ^0.11.0+2 @@ -30,7 +30,6 @@ flutter: uses-material-design: true assets: - assets/translations/ - - assets/ui/ fonts: - family: Nunito -- GitLab