Skip to content
Snippets Groups Projects
Commit ca46764c authored by Benoît Harrault's avatar Benoît Harrault
Browse files

Merge branch '31-use-activityparameters-widgets-from-flutter_custom_toolbox' into 'master'

Resolve "Use ActivityParameters widgets from flutter_custom_toolbox"

Closes #31

See merge request !30
parents 44e5049a 614ca888
No related branches found
No related tags found
1 merge request!30Resolve "Use ActivityParameters widgets from flutter_custom_toolbox"
Pipeline #7114 passed
import 'dart:math';
import 'package:flutter/material.dart';
import 'package:flutter_custom_toolbox/flutter_toolbox.dart';
import 'package:solitaire/config/application_config.dart';
import 'package:solitaire/data/game_data.dart';
import 'package:solitaire/models/activity/board.dart';
import 'package:solitaire/models/activity/cell.dart';
import 'package:solitaire/models/activity/cell_location.dart';
class ParameterPainterLayout extends CustomPainter {
const ParameterPainterLayout({
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);
Color gridBackgroundColor = Colors.grey;
switch (value) {
case ApplicationConfig.layoutValueFrench:
gridBackgroundColor = Colors.green;
break;
case ApplicationConfig.layoutValueGerman:
gridBackgroundColor = Colors.orange;
break;
case ApplicationConfig.layoutValueEnglish:
gridBackgroundColor = Colors.red;
break;
case ApplicationConfig.layoutValueDiamond:
gridBackgroundColor = Colors.purple;
break;
default:
printlog('Wrong value for size parameter value: $value');
}
final paint = Paint();
paint.strokeJoin = StrokeJoin.round;
paint.strokeWidth = 3;
// Mini grid
final borderColor = Colors.grey.shade800;
// Get board data from named templates
final List<String>? template = GameData.templates[value];
final BoardCells grid = [];
int row = 0;
template?.forEach((String line) {
final List<Cell> gridLine = [];
int col = 0;
line.split("").forEach((String tileCode) {
gridLine.add(tileCode == ' '
? Cell.none
: Cell(
location: CellLocation.go(row, col),
hasHole: true,
hasPeg: (tileCode == 'o'),
));
col++;
});
row++;
grid.add(gridLine);
});
final int gridWidth = grid.length;
final int gridHeight = grid.first.length;
paint.strokeWidth = 2;
final double cellSize = (canvasSize * .9) / max(gridWidth, gridHeight);
final double originX = (canvasSize - gridWidth * cellSize) / 2;
final double originY = (canvasSize - gridHeight * cellSize) / 2;
for (int row = 0; row < gridHeight; row++) {
for (int col = 0; col < gridWidth; col++) {
final Offset topLeft = Offset(originX + col * cellSize, originY + row * cellSize);
final Offset bottomRight = topLeft + Offset(cellSize, cellSize);
paint.color = Colors.white;
paint.style = PaintingStyle.fill;
if (grid[row][col].hasPeg) {
paint.color = gridBackgroundColor;
canvas.drawRect(Rect.fromPoints(topLeft, bottomRight), paint);
}
if (grid[row][col].hasHole) {
paint.color = borderColor;
paint.style = PaintingStyle.stroke;
canvas.drawRect(Rect.fromPoints(topLeft, bottomRight), paint);
}
}
}
}
@override
bool shouldRepaint(CustomPainter oldDelegate) {
return false;
}
}
import 'package:flutter/material.dart';
import 'package:flutter_custom_toolbox/flutter_toolbox.dart';
import 'package:solitaire/config/application_config.dart';
import 'package:solitaire/cubit/activity/activity_cubit.dart';
import 'package:solitaire/models/activity/cell.dart';
......@@ -28,7 +29,8 @@ class TileWidget extends StatelessWidget {
);
} else {
return Image(
image: AssetImage('assets/skins/${currentActivity.globalSettings.skin}_board.png'),
image: AssetImage(
'assets/skins/${currentActivity.activitySettings.get(ApplicationConfig.parameterCodeSkin)}_board.png'),
width: tileSize,
height: tileSize,
fit: BoxFit.fill,
......@@ -65,7 +67,8 @@ class TileWidget extends StatelessWidget {
required Activity currentActivity,
required ActivityCubit activityCubit,
}) {
String image = 'assets/skins/${currentActivity.globalSettings.skin}_hole.png';
String image =
'assets/skins/${currentActivity.activitySettings.get(ApplicationConfig.parameterCodeSkin)}_hole.png';
return DragTarget<List<int>>(
builder: (
......@@ -121,7 +124,8 @@ class TileWidget extends StatelessWidget {
Widget peg({
required Activity currentActivity,
}) {
String image = 'assets/skins/${currentActivity.globalSettings.skin}_peg.png';
String image =
'assets/skins/${currentActivity.activitySettings.get(ApplicationConfig.parameterCodeSkin)}_peg.png';
return Image(
image: AssetImage(image),
......
......@@ -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:
......
......@@ -3,7 +3,7 @@ description: Solitaire Game
publish_to: "none"
version: 0.4.2+27
version: 0.5.0+28
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)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment