From fda31778a2cea624412d0755d17472b60541e795 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Beno=C3=AEt=20Harrault?= <benoit@harrault.fr>
Date: Thu, 17 Mar 2022 15:50:31 +0100
Subject: [PATCH] Improve layout

---
 android/gradle.properties  |   4 +-
 assets/icons/key.png       | Bin 0 -> 2662 bytes
 icons/build_game_icons.sh  |   1 +
 icons/key.svg              |   2 +
 lib/layout/board.dart      |   8 ++--
 lib/layout/game.dart       |   4 +-
 lib/layout/keyboard.dart   |  78 +++++++++++++++++++++++--------------
 lib/layout/parameters.dart |   8 ++--
 lib/screens/home.dart      |   2 +-
 9 files changed, 64 insertions(+), 43 deletions(-)
 create mode 100644 assets/icons/key.png
 create mode 100644 icons/key.svg

diff --git a/android/gradle.properties b/android/gradle.properties
index bc2d95e..818e87b 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.1
-app.versionCode=1
+app.versionName=0.0.2
+app.versionCode=2
diff --git a/assets/icons/key.png b/assets/icons/key.png
new file mode 100644
index 0000000000000000000000000000000000000000..ff392f68a742723127b23e7a863f877f04da2fc5
GIT binary patch
literal 2662
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
b{`Pvtx}KB+8Qe;ppa!I;tDnm{r-UW|E<<vP

literal 0
HcmV?d00001

diff --git a/icons/build_game_icons.sh b/icons/build_game_icons.sh
index 39fada6..2fddd00 100755
--- a/icons/build_game_icons.sh
+++ b/icons/build_game_icons.sh
@@ -58,6 +58,7 @@ build_icon ${CURRENT_DIR}/button_back.svg   ${BASE_DIR}/assets/icons/button_back
 build_icon ${CURRENT_DIR}/button_help.svg   ${BASE_DIR}/assets/icons/button_help.png
 build_icon ${CURRENT_DIR}/button_start.svg  ${BASE_DIR}/assets/icons/button_start.png
 build_icon ${CURRENT_DIR}/game_win.svg      ${BASE_DIR}/assets/icons/game_win.png
+build_icon ${CURRENT_DIR}/key.svg           ${BASE_DIR}/assets/icons/key.png
 
 build_icon ${CURRENT_DIR}/lang_fr.svg       ${BASE_DIR}/assets/icons/lang_fr.png
 build_icon ${CURRENT_DIR}/length_5.svg      ${BASE_DIR}/assets/icons/length_5.png
diff --git a/icons/key.svg b/icons/key.svg
new file mode 100644
index 0000000..4ce7f70
--- /dev/null
+++ b/icons/key.svg
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg enable-background="new 0 0 100 100" version="1.1" viewBox="0 0 102 102" xml:space="preserve" xmlns="http://www.w3.org/2000/svg"><defs><radialGradient id="radialGradient1525" cx="28.886" cy="23.061" r="50.92" gradientTransform="matrix(1.0318 1.378 -.79998 .59897 23.21 -30.64)" gradientUnits="userSpaceOnUse"><stop stop-color="#adadad" offset="0"/><stop stop-color="#e8e8e8" offset="1"/></radialGradient></defs><rect x=".17153" y=".2307" width="101.84" height="101.77" ry="0" fill="url(#radialGradient1525)" stroke="#000" stroke-width="2.0362"/></svg>
diff --git a/lib/layout/board.dart b/lib/layout/board.dart
index b700b62..bb72265 100644
--- a/lib/layout/board.dart
+++ b/lib/layout/board.dart
@@ -57,7 +57,7 @@ class Board {
 
       List<String> tips = GameUtils.getTips(myProvider, word);
 
-      List<Column> tableCells = [];
+      List<TableCell> tableCells = [];
       for (int colIndex = 0; colIndex < wordLength; colIndex++) {
         String cellValue = ' ';
         if (word.length > colIndex) {
@@ -70,8 +70,8 @@ class Board {
         }
 
         tableCells.add(
-          Column(
-            children: [ buildCellWidget(cellValue, cellTip) ]
+          TableCell(
+            child: buildCellWidget(cellValue, cellTip)
           )
         );
       };
@@ -83,7 +83,7 @@ class Board {
     }
 
     return Container(
-      margin: EdgeInsets.symmetric(horizontal: 30),
+      margin: EdgeInsets.symmetric(horizontal: 40),
       padding: EdgeInsets.all(2),
 
       child: Table(
diff --git a/lib/layout/game.dart b/lib/layout/game.dart
index 99adcc3..d305e99 100644
--- a/lib/layout/game.dart
+++ b/lib/layout/game.dart
@@ -27,8 +27,8 @@ class Game {
     );
   }
 
-  static FlatButton buildRestartGameButton(Data myProvider) {
-    return FlatButton(
+  static TextButton buildRestartGameButton(Data myProvider) {
+    return TextButton(
       child: Container(
         child: Image(
           image: AssetImage('assets/icons/button_back.png'),
diff --git a/lib/layout/keyboard.dart b/lib/layout/keyboard.dart
index 2aaa53a..16ce8dd 100644
--- a/lib/layout/keyboard.dart
+++ b/lib/layout/keyboard.dart
@@ -15,44 +15,62 @@ class Keyboard {
     ];
 
     Widget buildKeyWidget(String key) {
-      String displayedText = key;
+      String keyText = key;
       if (key == '<') {
-        displayedText = '⬅️';
+        keyText = '⬅️';
       } else if (key == '!') {
-        displayedText = '☑️';
+        keyText = '☑️';
       }
 
       Color keyColor = Colors.black;
 
-      return FlatButton(
-        child: Text(
-          displayedText,
-          style: TextStyle(
-            color: keyColor,
-            fontSize: 30.0,
-            fontWeight: FontWeight.w800,
+      if (key == ' ') {
+        return SizedBox();
+      }
+
+      return Stack(
+        alignment: Alignment.center,
+        children: <Widget>[
+          Image(
+            image: AssetImage('assets/icons/key.png'),
+            fit: BoxFit.fill
+          ),
+          Center(
+            child: TextButton(
+              style: TextButton.styleFrom(
+                padding: const EdgeInsets.all(0),
+              ),
+              child: Text(
+                keyText,
+                style: TextStyle(
+                  color: keyColor,
+                  fontSize: 30.0,
+                  fontWeight: FontWeight.w800,
+                ),
+                textAlign: TextAlign.center
+              ),
+              onPressed: () {
+                if (key == '<') {
+                  GameUtils.removeLetter(myProvider);
+                } else if (key == '!') {
+                  GameUtils.submitWord(myProvider);
+                } else if (key != ' ') {
+                  GameUtils.addLetter(myProvider, key);
+                }
+              },
+            )
           ),
-          textAlign: TextAlign.center
-        ),
-        onPressed: () {
-          if (key == '<') {
-            GameUtils.removeLetter(myProvider);
-          } else if (key == '!') {
-            GameUtils.submitWord(myProvider);
-          } else if (key != ' ') {
-            GameUtils.addLetter(myProvider, key);
-          }
-        },
+        ]
       );
     }
 
     List<TableRow> tableRows = [];
     keys.forEach((row) {
-      List<Column> tableCells = [];
+      List<TableCell> tableCells = [];
       row.forEach((key) {
         tableCells.add(
-          Column(
-            children: [ buildKeyWidget(key) ]
+          TableCell(
+            child: buildKeyWidget(key),
           )
         );
       });
@@ -68,12 +86,12 @@ class Keyboard {
       padding: EdgeInsets.all(2),
 
       child: Table(
-        defaultVerticalAlignment: TableCellVerticalAlignment.bottom,
-        border: TableBorder.all(
-          width: 2.0,
-          color: Colors.blue,
-          style: BorderStyle.solid,
-        ),
+        defaultVerticalAlignment: TableCellVerticalAlignment.middle,
+        // border: TableBorder.all(
+        //   width: 2.0,
+        //   color: Colors.blue,
+        //   style: BorderStyle.solid,
+        // ),
         children: tableRows,
       )
     );
diff --git a/lib/layout/parameters.dart b/lib/layout/parameters.dart
index 9a6f7d4..3a2ae03 100644
--- a/lib/layout/parameters.dart
+++ b/lib/layout/parameters.dart
@@ -48,7 +48,7 @@ class Parameters {
               decorationImage,
               Column(
                 children: [
-                  FlatButton(
+                  TextButton(
                     child: Container(
                       child: Image(
                         image: AssetImage('assets/icons/button_start.png'),
@@ -91,15 +91,15 @@ class Parameters {
     );
   }
 
-  static FlatButton _buildParameterButton(Data myProvider, String parameterCode, String parameterValue) {
+  static TextButton _buildParameterButton(Data myProvider, String parameterCode, String parameterValue) {
     String currentValue = myProvider.getParameterValue(parameterCode).toString();
 
     bool isActive = (parameterValue == currentValue);
     String imageAsset = 'assets/icons/' + parameterCode + '_' + parameterValue + '.png';
 
-    return FlatButton(
-      padding: EdgeInsets.all(2),
+    return TextButton(
       child: Container(
+        padding: EdgeInsets.all(2),
         decoration: BoxDecoration(
           color: Colors.white,
           borderRadius: BorderRadius.circular(10),
diff --git a/lib/screens/home.dart b/lib/screens/home.dart
index 1381d16..03c6cd9 100644
--- a/lib/screens/home.dart
+++ b/lib/screens/home.dart
@@ -31,7 +31,7 @@ class _HomeState extends State<Home> {
 
     if (myProvider.gameIsRunning) {
       menuActions = [
-        FlatButton(
+        TextButton(
           child: Container(
             decoration: BoxDecoration(
               borderRadius: BorderRadius.circular(4),
-- 
GitLab