From 648f7a96bd4a80aedff1fa0ab0c024946d7e1bd9 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Beno=C3=AEt=20Harrault?= <benoit@harrault.fr>
Date: Thu, 8 Jul 2021 21:01:32 +0200
Subject: [PATCH] Fix display conflicts in board

---
 android/gradle.properties                     |  4 +-
 .../metadata/android/en-US/changelogs/27.txt  |  1 +
 .../metadata/android/fr-FR/changelogs/27.txt  |  1 +
 lib/entities/cell.dart                        |  2 +
 lib/utils/board_utils.dart                    | 38 +++++++++++--------
 5 files changed, 29 insertions(+), 17 deletions(-)
 create mode 100644 fastlane/metadata/android/en-US/changelogs/27.txt
 create mode 100644 fastlane/metadata/android/fr-FR/changelogs/27.txt

diff --git a/android/gradle.properties b/android/gradle.properties
index f0fcf6c..408253c 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.26
-app.versionCode=26
+app.versionName=0.0.27
+app.versionCode=27
diff --git a/fastlane/metadata/android/en-US/changelogs/27.txt b/fastlane/metadata/android/en-US/changelogs/27.txt
new file mode 100644
index 0000000..fb8f60c
--- /dev/null
+++ b/fastlane/metadata/android/en-US/changelogs/27.txt
@@ -0,0 +1 @@
+Fix display conflicts in board
diff --git a/fastlane/metadata/android/fr-FR/changelogs/27.txt b/fastlane/metadata/android/fr-FR/changelogs/27.txt
new file mode 100644
index 0000000..32a34d5
--- /dev/null
+++ b/fastlane/metadata/android/fr-FR/changelogs/27.txt
@@ -0,0 +1 @@
+Correction de l'affichage des conflits sur la grille
diff --git a/lib/entities/cell.dart b/lib/entities/cell.dart
index f8911de..f9213e9 100644
--- a/lib/entities/cell.dart
+++ b/lib/entities/cell.dart
@@ -1,6 +1,7 @@
 import 'package:flutter/material.dart';
 
 import '../provider/data.dart';
+import '../utils/board_utils.dart';
 
 class Cell {
   int value;
@@ -103,6 +104,7 @@ class Cell {
             myProvider.updateCellValue(myProvider.currentCellCol, myProvider.currentCellRow, this.value);
           }
           myProvider.selectCell(null, null);
+          BoardUtils.computeConflictsInBoard(myProvider);
         },
       )
     );
diff --git a/lib/utils/board_utils.dart b/lib/utils/board_utils.dart
index 2c93084..51520a9 100644
--- a/lib/utils/board_utils.dart
+++ b/lib/utils/board_utils.dart
@@ -156,19 +156,36 @@ class BoardUtils {
 
     bool isSolved = true;
 
-    // reset conflict states
+    // (re)compute conflicts
+    BoardUtils.computeConflictsInBoard(myProvider);
+
+    // check grid is fully completed and does not contain conflict
     for (var row = 0; row < boardSize; row++) {
       for (var col = 0; col < boardSize; col++) {
-        cells[row][col].conflictsCount = 0;
+        if (cells[row][col].value == 0 || cells[row][col].conflictsCount != 0) {
+          return false;
+        }
       }
     }
 
-    // check grid is fully completed
+    print('-> ok sudoku solved!');
+
+    return true;
+  }
+
+
+  static void computeConflictsInBoard(Data myProvider) {
+    List cells = myProvider.cells;
+
+    int blockSizeHorizontal = myProvider.blockSizeHorizontal;
+    int blockSizeVertical = myProvider.blockSizeVertical;
+
+    int boardSize = blockSizeHorizontal * blockSizeVertical;
+
+    // reset conflict states
     for (var row = 0; row < boardSize; row++) {
       for (var col = 0; col < boardSize; col++) {
-        if (cells[row][col].value == 0) {
-          isSolved = false;
-        }
+        cells[row][col].conflictsCount = 0;
       }
     }
 
@@ -188,7 +205,6 @@ class BoardUtils {
         for (var col = 0; col < boardSize; col++) {
           cells[row][col].conflictsCount++;
         }
-        isSolved = false;
       }
     }
 
@@ -208,7 +224,6 @@ class BoardUtils {
         for (var row = 0; row < boardSize; row++) {
           cells[row][col].conflictsCount++;
         }
-        isSolved = false;
       }
     }
 
@@ -241,16 +256,9 @@ class BoardUtils {
               cells[row][col].conflictsCount++;
             }
           }
-          isSolved = false;
         }
       }
     }
-
-    if (isSolved) {
-      print('-> ok sudoku solved!');
-    }
-
-    return isSolved;
   }
 
 }
-- 
GitLab