From f46110ce701b80d077f6b31ab402798046f5f8b4 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Beno=C3=AEt=20Harrault?= <benoit@harrault.fr>
Date: Thu, 8 Jul 2021 22:41:33 +0200
Subject: [PATCH] Improve flexibility in layout

---
 android/gradle.properties                     |  4 +-
 .../metadata/android/en-US/changelogs/28.txt  |  1 +
 .../metadata/android/fr-FR/changelogs/28.txt  |  1 +
 lib/entities/cell.dart                        |  4 ++
 lib/layout/game.dart                          | 35 ++++++++++-------
 lib/layout/parameters.dart                    | 39 +++++++++----------
 lib/utils/board_utils.dart                    |  8 +++-
 7 files changed, 55 insertions(+), 37 deletions(-)
 create mode 100644 fastlane/metadata/android/en-US/changelogs/28.txt
 create mode 100644 fastlane/metadata/android/fr-FR/changelogs/28.txt

diff --git a/android/gradle.properties b/android/gradle.properties
index 408253c..e644338 100644
--- a/android/gradle.properties
+++ b/android/gradle.properties
@@ -1,5 +1,5 @@
 org.gradle.jvmargs=-Xmx1536M
 android.useAndroidX=true
 android.enableJetifier=true
-app.versionName=0.0.27
-app.versionCode=27
+app.versionName=0.0.28
+app.versionCode=28
diff --git a/fastlane/metadata/android/en-US/changelogs/28.txt b/fastlane/metadata/android/en-US/changelogs/28.txt
new file mode 100644
index 0000000..101a8b4
--- /dev/null
+++ b/fastlane/metadata/android/en-US/changelogs/28.txt
@@ -0,0 +1 @@
+Improve flexibility in layout
diff --git a/fastlane/metadata/android/fr-FR/changelogs/28.txt b/fastlane/metadata/android/fr-FR/changelogs/28.txt
new file mode 100644
index 0000000..c4828ee
--- /dev/null
+++ b/fastlane/metadata/android/fr-FR/changelogs/28.txt
@@ -0,0 +1 @@
+Amélioration de la flexibilité dans la mise en page
diff --git a/lib/entities/cell.dart b/lib/entities/cell.dart
index f9213e9..bb56ed9 100644
--- a/lib/entities/cell.dart
+++ b/lib/entities/cell.dart
@@ -81,6 +81,10 @@ class Cell {
   }
 
   Container widgetUpdateValue(Data myProvider) {
+    if (this.value < 0) {
+      return Container();
+    }
+
     String imageAsset = 'assets/skins/empty.png';
     if (this.value > 0) {
       imageAsset = 'assets/skins/' + myProvider.skin + '_' + this.value.toString() + '.png';
diff --git a/lib/layout/game.dart b/lib/layout/game.dart
index 9c9275a..e3c0615 100644
--- a/lib/layout/game.dart
+++ b/lib/layout/game.dart
@@ -34,6 +34,10 @@ class Game {
     bool isUpdatableCellSelected = isCellSelected ? !myProvider.cells[myProvider.currentCellRow][myProvider.currentCellCol].isFixed : false;
     int maxValue = myProvider.blockSizeHorizontal * myProvider.blockSizeVertical;
 
+    int maxItemsPerLine = 10;
+    int linesCount = (maxValue / maxItemsPerLine).floor() + 1;
+    int itemsCountPerLine = min(maxItemsPerLine, maxValue + 1);
+
     return Container(
       margin: EdgeInsets.all(2),
       padding: EdgeInsets.all(2),
@@ -41,19 +45,24 @@ class Game {
       child: Table(
         defaultColumnWidth: IntrinsicColumnWidth(),
         children: [
-          TableRow(
-            children: [
-              for (var value = 0; value <= maxValue; value++)
-                Column(
-                  children: [
-                    Cell(
-                      isUpdatableCellSelected ? value : 0,
-                      false
-                    ).widgetUpdateValue(myProvider)
-                  ]
-                ),
-            ]
-          ),
+          for (var lineIndex = 0; lineIndex < linesCount; lineIndex++)
+            TableRow(
+              children: [
+                for (
+                  var value = lineIndex * itemsCountPerLine;
+                  value < (lineIndex + 1) * itemsCountPerLine;
+                  value++
+                )
+                  Column(
+                    children: [
+                      Cell(
+                        isUpdatableCellSelected ? (value <= maxValue ? value : -1) : -1,
+                        false
+                      ).widgetUpdateValue(myProvider)
+                    ]
+                  ),
+              ]
+            ),
         ]
       ),
     );
diff --git a/lib/layout/parameters.dart b/lib/layout/parameters.dart
index 9ac761c..dad275d 100644
--- a/lib/layout/parameters.dart
+++ b/lib/layout/parameters.dart
@@ -5,18 +5,22 @@ import '../utils/game_utils.dart';
 
 class Parameters {
 
-  static const double _parameterButtonSize = 70;
-  static const double _startButtonSize = 150;
+  static const double _startButtonSize = 120;
 
   static Container buildParametersSelector(Data myProvider) {
     return Container(
+      padding: EdgeInsets.all(2),
+      margin: EdgeInsets.all(2),
       child: Column(
         mainAxisSize: MainAxisSize.min,
         mainAxisAlignment: MainAxisAlignment.center,
         children: [
           Parameters.buildParameterSelector(myProvider, 'difficulty'),
+          SizedBox(height: 5),
           Parameters.buildParameterSelector(myProvider, 'size'),
+          SizedBox(height: 5),
           Parameters.buildParameterSelector(myProvider, 'skin'),
+          SizedBox(height: 5),
 
           Parameters.buildStartGameButton(myProvider),
         ],
@@ -31,6 +35,7 @@ class Parameters {
       mainAxisAlignment: MainAxisAlignment.center,
       children: [
         FlatButton(
+          padding: EdgeInsets.all(2),
           child: Image(
             image: AssetImage('assets/icons/button_start.png'),
             width: _startButtonSize,
@@ -44,28 +49,23 @@ class Parameters {
   }
 
 
-  static Column buildParameterSelector(Data myProvider, String parameterCode) {
+  static Table buildParameterSelector(Data myProvider, String parameterCode) {
     List availableValues = myProvider.getParameterAvailableValues(parameterCode);
 
-    return Column(
+    return Table(
+      defaultColumnWidth: IntrinsicColumnWidth(),
       children: [
-        Table(
-          defaultColumnWidth: IntrinsicColumnWidth(),
+        TableRow(
           children: [
-            TableRow(
-              children: [
-                for (var index = 0; index < availableValues.length; index++)
-                  Column(
-                    children: [
-                      _buildParameterButton(myProvider, parameterCode, availableValues[index])
-                    ]
-                  ),
-              ],
-            ),
+            for (var index = 0; index < availableValues.length; index++)
+              Column(
+                children: [
+                  _buildParameterButton(myProvider, parameterCode, availableValues[index])
+                ]
+              ),
           ],
         ),
-        SizedBox(height: 20),
-      ]
+      ],
     );
   }
 
@@ -77,6 +77,7 @@ class Parameters {
     String imageAsset = 'assets/icons/' + parameterCode + '_' + parameterValue + '.png';
 
     return FlatButton(
+      padding: EdgeInsets.all(2),
       child: Container(
         decoration: BoxDecoration(
           color: Colors.white,
@@ -88,8 +89,6 @@ class Parameters {
         ),
         child: Image(
           image: AssetImage(imageAsset),
-          width: _parameterButtonSize,
-          height: _parameterButtonSize,
           fit: BoxFit.fill
         ),
       ),
diff --git a/lib/utils/board_utils.dart b/lib/utils/board_utils.dart
index 51520a9..8800856 100644
--- a/lib/utils/board_utils.dart
+++ b/lib/utils/board_utils.dart
@@ -7,12 +7,13 @@ import '../provider/data.dart';
 class BoardUtils {
 
   static printGrid(List cells) {
+    String stringValues = '0123456789';
     print('');
     print('-------');
     for (var rowIndex = 0; rowIndex < cells.length; rowIndex++) {
       String row = '';
       for (var colIndex = 0; colIndex < cells[rowIndex].length; colIndex++) {
-        row += cells[rowIndex][colIndex].value.toString();
+        row += stringValues[cells[rowIndex][colIndex].value];
       }
       print(row);
     }
@@ -62,11 +63,14 @@ class BoardUtils {
     List cells = [];
     int boardSize = int.parse(pow(grid.length, 1/2).toStringAsFixed(0));
 
+    String stringValues = '0123456789';
+
     int index = 0;
     for (var rowIndex = 0; rowIndex < boardSize; rowIndex++) {
       List row = [];
       for (var colIndex = 0; colIndex < boardSize; colIndex++) {
-        int value = int.parse(grid[index++]);
+        String stringValue = grid[index++];
+        int value = stringValues.indexOf(stringValue);
         row.add(Cell(value, (value != 0)));
       }
       cells.add(row);
-- 
GitLab