diff --git a/analysis_options.yaml b/analysis_options.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..f9b303465f19b5fbf5ec669cd083c9cc38ecda9a
--- /dev/null
+++ b/analysis_options.yaml
@@ -0,0 +1 @@
+include: package:flutter_lints/flutter.yaml
diff --git a/android/app/build.gradle b/android/app/build.gradle
index 883ad5f3ba59dca043f79a828020cd52647e0146..200c1fe68c3da536efd66562631e4074d48e7d41 100644
--- a/android/app/build.gradle
+++ b/android/app/build.gradle
@@ -44,7 +44,7 @@ android {
 
     defaultConfig {
         applicationId "org.benoitharrault.minehunter"
-        minSdkVersion 16
+        minSdkVersion flutter.minSdkVersion
         targetSdkVersion 30
         versionCode appVersionCode.toInteger()
         versionName appVersionName
diff --git a/android/gradle.properties b/android/gradle.properties
index 05849ead61c8bdcb574c1cb517125337eb74aff4..b6a6bb0acf370ee61de0ddffdd6b58a55d1ee9f4 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.1.12
-app.versionCode=33
+app.versionName=0.1.13
+app.versionCode=34
diff --git a/fastlane/metadata/android/en-US/changelogs/34.txt b/fastlane/metadata/android/en-US/changelogs/34.txt
new file mode 100644
index 0000000000000000000000000000000000000000..6ab11150150fc75a46c9acc317890208e5a120b9
--- /dev/null
+++ b/fastlane/metadata/android/en-US/changelogs/34.txt
@@ -0,0 +1 @@
+Add automatic flutter linter. Apply code lints. Update dependencies.
diff --git a/fastlane/metadata/android/fr-FR/changelogs/34.txt b/fastlane/metadata/android/fr-FR/changelogs/34.txt
new file mode 100644
index 0000000000000000000000000000000000000000..609f5cf6e95a8df0799865df2e1ebde8fa981e5a
--- /dev/null
+++ b/fastlane/metadata/android/fr-FR/changelogs/34.txt
@@ -0,0 +1 @@
+Ajout d'un correcteur automatique de code. Application des corrections. Mise à jour des dépendances.
diff --git a/lib/entities/cell.dart b/lib/entities/cell.dart
index 5f50e799ca406b7193306a75691d78ebdc36f8ec..3185ed5910a6d3b94398c0577e653a6dcd737ad2 100644
--- a/lib/entities/cell.dart
+++ b/lib/entities/cell.dart
@@ -1,4 +1,5 @@
 import 'package:flutter/material.dart';
+
 import 'package:minehunter/provider/data.dart';
 import 'package:minehunter/utils/board_animate.dart';
 import 'package:minehunter/utils/board_utils.dart';
@@ -20,18 +21,18 @@ class Cell {
   * Build widget for board cell, with interactions
   */
   Container widget(Data myProvider, int row, int col) {
-    String imageAsset = this.getImageAssetName(myProvider);
+    String imageAsset = getImageAssetName(myProvider);
 
     return Container(
       decoration: BoxDecoration(
-        color: this.getBackgroundColor(myProvider),
-        border: this.getCellBorders(myProvider, row, col),
+        color: getBackgroundColor(myProvider),
+        border: getCellBorders(myProvider, row, col),
       ),
       child: GestureDetector(
         child: AnimatedSwitcher(
           duration: const Duration(milliseconds: 100),
           transitionBuilder: (Widget child, Animation<double> animation) {
-            return ScaleTransition(child: child, scale: animation);
+            return ScaleTransition(scale: animation, child: child);
           },
           child: Image(
             image: AssetImage(imageAsset),
@@ -66,46 +67,38 @@ class Cell {
   * Compute image asset name, from skin and cell value/state
   */
   String getImageAssetName(Data myProvider) {
-    String imageAsset = 'assets/skins/' + myProvider.parameterSkin + '_tile_unknown.png';
+    String imageAsset = 'assets/skins/${myProvider.parameterSkin}_tile_unknown.png';
 
     bool showSolution = myProvider.gameWin || myProvider.gameFail;
     if (!showSolution) {
       // Running game
-      if (this.isExplored) {
-        if (this.isMined) {
+      if (isExplored) {
+        if (isMined) {
           // Boom
-          imageAsset = 'assets/skins/' + myProvider.parameterSkin + '_tile_mine.png';
+          imageAsset = 'assets/skins/${myProvider.parameterSkin}_tile_mine.png';
         } else {
           // Show mines count around
-          imageAsset = 'assets/skins/' +
-              myProvider.parameterSkin +
-              '_tile_' +
-              this.minesCountAround.toString() +
-              '.png';
+          imageAsset = 'assets/skins/${myProvider.parameterSkin}_tile_$minesCountAround.png';
         }
       } else {
-        if (this.isMarked) {
+        if (isMarked) {
           // Danger!
-          imageAsset = 'assets/skins/' + myProvider.parameterSkin + '_tile_flag.png';
+          imageAsset = 'assets/skins/${myProvider.parameterSkin}_tile_flag.png';
         }
       }
     } else {
       // Finished game
-      if (this.isMined) {
-        if (this.isExploded) {
+      if (isMined) {
+        if (isExploded) {
           // Mine exploded
-          imageAsset = 'assets/skins/' + myProvider.parameterSkin + '_tile_mine.png';
+          imageAsset = 'assets/skins/${myProvider.parameterSkin}_tile_mine.png';
         } else {
           // Mine not found
-          imageAsset = 'assets/skins/' + myProvider.parameterSkin + '_tile_mine_not_found.png';
+          imageAsset = 'assets/skins/${myProvider.parameterSkin}_tile_mine_not_found.png';
         }
       } else {
         // Show all mines counts
-        imageAsset = 'assets/skins/' +
-            myProvider.parameterSkin +
-            '_tile_' +
-            this.minesCountAround.toString() +
-            '.png';
+        imageAsset = 'assets/skins/${myProvider.parameterSkin}_tile_$minesCountAround.png';
       }
     }
 
@@ -115,13 +108,13 @@ class Cell {
   // Compute cell background color, from cell state
   Color getBackgroundColor(Data myProvider) {
     if (myProvider.gameWin) {
-      return this.isAnimated ? Colors.green.shade400 : Colors.green.shade500;
+      return isAnimated ? Colors.green.shade400 : Colors.green.shade500;
     }
     if (myProvider.gameFail) {
-      return this.isAnimated ? Colors.pink.shade200 : Colors.pink.shade400;
+      return isAnimated ? Colors.pink.shade200 : Colors.pink.shade400;
     }
 
-    return this.isAnimated ? Colors.white : Colors.grey.shade200;
+    return isAnimated ? Colors.white : Colors.grey.shade200;
   }
 
   // Compute cell borders, from board size and cell state
diff --git a/lib/layout/board.dart b/lib/layout/board.dart
index 4137449af589de500ec6fa8d7e45d2099a16fbaa..857a84f9e8b107d12df5f3bfb6b3501bc6ac2e1b 100644
--- a/lib/layout/board.dart
+++ b/lib/layout/board.dart
@@ -1,11 +1,13 @@
 import 'package:flutter/material.dart';
+
+import 'package:minehunter/entities/cell.dart';
 import 'package:minehunter/provider/data.dart';
 
 class Board {
   static Container buildGameBoard(Data myProvider) {
     return Container(
-      margin: EdgeInsets.all(2),
-      padding: EdgeInsets.all(2),
+      margin: const EdgeInsets.all(2),
+      padding: const EdgeInsets.all(2),
       child: Column(
         children: [
           buildGameTileset(myProvider),
@@ -15,7 +17,7 @@ class Board {
   }
 
   static Widget buildGameTileset(Data myProvider) {
-    List cells = myProvider.cells;
+    List<List<Cell>> cells = myProvider.cells;
     Color borderColor = myProvider.reportMode ? Colors.blue : Colors.black;
 
     return Container(
@@ -28,12 +30,12 @@ class Board {
         ),
       ),
       child: Table(
-        defaultColumnWidth: IntrinsicColumnWidth(),
+        defaultColumnWidth: const IntrinsicColumnWidth(),
         children: [
-          for (var row = 0; row < myProvider.sizeVertical; row++)
+          for (int row = 0; row < myProvider.sizeVertical; row++)
             TableRow(
               children: [
-                for (var col = 0; col < myProvider.sizeHorizontal; col++)
+                for (int col = 0; col < myProvider.sizeHorizontal; col++)
                   Column(
                     children: [
                       cells[row][col].widget(myProvider, row, col),
@@ -50,15 +52,10 @@ class Board {
     String reportModeSuffix = myProvider.reportMode ? 'off' : 'on';
 
     return TextButton(
-      child: Container(
-        child: Image(
-          image: AssetImage('assets/skins/' +
-              myProvider.parameterSkin +
-              '_indicator_walk_' +
-              reportModeSuffix +
-              '.png'),
-          fit: BoxFit.fill,
-        ),
+      child: Image(
+        image: AssetImage(
+            'assets/skins/${myProvider.parameterSkin}_indicator_walk_$reportModeSuffix.png'),
+        fit: BoxFit.fill,
       ),
       onPressed: () => myProvider.updateReportMode(false),
     );
@@ -68,15 +65,10 @@ class Board {
     String reportModeSuffix = myProvider.reportMode ? 'on' : 'off';
 
     return TextButton(
-      child: Container(
-        child: Image(
-          image: AssetImage('assets/skins/' +
-              myProvider.parameterSkin +
-              '_indicator_report_' +
-              reportModeSuffix +
-              '.png'),
-          fit: BoxFit.fill,
-        ),
+      child: Image(
+        image: AssetImage(
+            'assets/skins/${myProvider.parameterSkin}_indicator_report_$reportModeSuffix.png'),
+        fit: BoxFit.fill,
       ),
       onPressed: () => myProvider.updateReportMode(true),
     );
@@ -86,15 +78,10 @@ class Board {
     String reportModeSuffix = myProvider.reportMode ? 'on' : 'off';
 
     return TextButton(
-      child: Container(
-        child: Image(
-          image: AssetImage('assets/skins/' +
-              myProvider.parameterSkin +
-              '_button_mark_mine_' +
-              reportModeSuffix +
-              '.png'),
-          fit: BoxFit.fill,
-        ),
+      child: Image(
+        image: AssetImage(
+            'assets/skins/${myProvider.parameterSkin}_button_mark_mine_$reportModeSuffix.png'),
+        fit: BoxFit.fill,
       ),
       onPressed: () => myProvider.updateReportMode(!myProvider.reportMode),
     );
@@ -102,12 +89,12 @@ class Board {
 
   static Widget buildToggleFlagModeLayout(Data myProvider) {
     Image paddingBlock = Image(
-      image: AssetImage('assets/skins/' + myProvider.parameterSkin + '_empty.png'),
+      image: AssetImage('assets/skins/${myProvider.parameterSkin}_empty.png'),
       fit: BoxFit.fill,
     );
 
     return Table(
-      defaultColumnWidth: IntrinsicColumnWidth(),
+      defaultColumnWidth: const IntrinsicColumnWidth(),
       children: [
         TableRow(
           children: [
diff --git a/lib/layout/game.dart b/lib/layout/game.dart
index 7ed0df0601b1df5e2d2313127b11a43d58ef510d..28cc6992a22131e8cac0906b9ae485cf78ffe640 100644
--- a/lib/layout/game.dart
+++ b/lib/layout/game.dart
@@ -1,33 +1,32 @@
 import 'package:flutter/material.dart';
+
 import 'package:minehunter/layout/board.dart';
 import 'package:minehunter/provider/data.dart';
 import 'package:minehunter/utils/board_utils.dart';
 import 'package:minehunter/utils/game_utils.dart';
 
 class Game {
-  static Container buildGameWidget(Data myProvider) {
+  static Widget buildGameWidget(Data myProvider) {
     bool gameIsFinished = myProvider.gameWin || myProvider.gameFail;
 
-    return Container(
-      child: Column(
-        mainAxisAlignment: MainAxisAlignment.start,
-        crossAxisAlignment: CrossAxisAlignment.center,
-        children: [
-          SizedBox(height: 8),
-          Game.buildTopIndicatorWidget(myProvider),
-          SizedBox(height: 2),
-          Expanded(
-            child: Board.buildGameBoard(myProvider),
-          ),
-          SizedBox(height: 2),
-          Container(
-            child: gameIsFinished
-                ? Game.buildEndGameMessage(myProvider)
-                : Board.buildToggleFlagModeLayout(myProvider),
-          ),
-          SizedBox(height: 8),
-        ],
-      ),
+    return Column(
+      mainAxisAlignment: MainAxisAlignment.start,
+      crossAxisAlignment: CrossAxisAlignment.center,
+      children: [
+        const SizedBox(height: 8),
+        Game.buildTopIndicatorWidget(myProvider),
+        const SizedBox(height: 2),
+        Expanded(
+          child: Board.buildGameBoard(myProvider),
+        ),
+        const SizedBox(height: 2),
+        Container(
+          child: gameIsFinished
+              ? Game.buildEndGameMessage(myProvider)
+              : Board.buildToggleFlagModeLayout(myProvider),
+        ),
+        const SizedBox(height: 8),
+      ],
     );
   }
 
@@ -37,13 +36,13 @@ class Game {
     double blockSize = 40;
 
     Image flagIconBlock = Image(
-      image: AssetImage('assets/skins/' + myProvider.parameterSkin + '_tile_flag.png'),
+      image: AssetImage('assets/skins/${myProvider.parameterSkin}_tile_flag.png'),
       fit: BoxFit.fill,
       height: blockSize,
       width: blockSize,
     );
     Image mineIconBlock = Image(
-      image: AssetImage('assets/skins/' + myProvider.parameterSkin + '_tile_mine.png'),
+      image: AssetImage('assets/skins/${myProvider.parameterSkin}_tile_mine.png'),
       fit: BoxFit.fill,
       height: blockSize,
       width: blockSize,
@@ -86,17 +85,15 @@ class Game {
 
   static TextButton buildRestartGameButton(Data myProvider) {
     return TextButton(
-      child: Container(
-        child: Image(
-          image: AssetImage('assets/icons/button_back.png'),
-          fit: BoxFit.fill,
-        ),
+      child: const Image(
+        image: AssetImage('assets/icons/button_back.png'),
+        fit: BoxFit.fill,
       ),
       onPressed: () => GameUtils.quitGame(myProvider),
     );
   }
 
-  static Container buildEndGameMessage(Data myProvider) {
+  static Widget buildEndGameMessage(Data myProvider) {
     Image decorationImage = Image(
       image: AssetImage(myProvider.gameWin
           ? 'assets/icons/game_win.png'
@@ -107,10 +104,10 @@ class Game {
     );
 
     return Container(
-      margin: EdgeInsets.all(2),
-      padding: EdgeInsets.all(2),
+      margin: const EdgeInsets.all(2),
+      padding: const EdgeInsets.all(2),
       child: Table(
-        defaultColumnWidth: IntrinsicColumnWidth(),
+        defaultColumnWidth: const IntrinsicColumnWidth(),
         children: [
           TableRow(
             children: [
diff --git a/lib/layout/parameters.dart b/lib/layout/parameters.dart
index 2f329d4106ce5a40cd48ee8bf1a14263a0082d26..5eef4e86923733fcdb9a25d93862b65174c20335 100644
--- a/lib/layout/parameters.dart
+++ b/lib/layout/parameters.dart
@@ -1,4 +1,5 @@
 import 'package:flutter/material.dart';
+
 import 'package:minehunter/provider/data.dart';
 import 'package:minehunter/utils/game_utils.dart';
 
@@ -14,11 +15,11 @@ class Parameters {
   static double buttonPadding = 0.0;
   static double buttonMargin = 0.0;
 
-  static Container buildParametersSelector(Data myProvider) {
+  static Widget buildParametersSelector(Data myProvider) {
     List<Widget> lines = [];
 
-    List parameters = myProvider.availableParameters;
-    for (var index = 0; index < parameters.length; index++) {
+    List<String> parameters = myProvider.availableParameters;
+    for (int index = 0; index < parameters.length; index++) {
       lines.add(buildParameterSelector(myProvider, parameters[index]));
       lines.add(SizedBox(height: separatorHeight));
     }
@@ -28,36 +29,34 @@ class Parameters {
         ? buildResumeGameButton(myProvider)
         : buildStartNewGameButton(myProvider);
 
-    return Container(
-      child: Column(
-        mainAxisAlignment: MainAxisAlignment.start,
-        crossAxisAlignment: CrossAxisAlignment.center,
-        children: [
-          SizedBox(height: separatorHeight),
-          Expanded(
-            child: Column(
-              mainAxisSize: MainAxisSize.min,
-              mainAxisAlignment: MainAxisAlignment.center,
-              children: lines,
-            ),
-          ),
-          SizedBox(height: separatorHeight),
-          Container(
-            child: buttonsBlock,
+    return Column(
+      mainAxisAlignment: MainAxisAlignment.start,
+      crossAxisAlignment: CrossAxisAlignment.center,
+      children: [
+        SizedBox(height: separatorHeight),
+        Expanded(
+          child: Column(
+            mainAxisSize: MainAxisSize.min,
+            mainAxisAlignment: MainAxisAlignment.center,
+            children: lines,
           ),
-        ],
-      ),
+        ),
+        SizedBox(height: separatorHeight),
+        Container(
+          child: buttonsBlock,
+        ),
+      ],
     );
   }
 
   static Image buildImageWidget(String imageAssetCode) {
     return Image(
-      image: AssetImage('assets/icons/' + imageAssetCode + '.png'),
+      image: AssetImage('assets/icons/$imageAssetCode.png'),
       fit: BoxFit.fill,
     );
   }
 
-  static Container buildImageContainerWidget(String imageAssetCode) {
+  static Widget buildImageContainerWidget(String imageAssetCode) {
     return Container(
       child: buildImageWidget(imageAssetCode),
     );
@@ -68,18 +67,18 @@ class Parameters {
       children: [
         TextButton(
           child: buildImageContainerWidget('placeholder'),
-          onPressed: () => null,
+          onPressed: () {},
         ),
       ],
     );
   }
 
-  static Container buildStartNewGameButton(Data myProvider) {
+  static Widget buildStartNewGameButton(Data myProvider) {
     return Container(
       margin: EdgeInsets.all(blockMargin),
       padding: EdgeInsets.all(blockPadding),
       child: Table(
-        defaultColumnWidth: IntrinsicColumnWidth(),
+        defaultColumnWidth: const IntrinsicColumnWidth(),
         children: [
           TableRow(
             children: [
@@ -100,12 +99,12 @@ class Parameters {
     );
   }
 
-  static Container buildResumeGameButton(Data myProvider) {
+  static Widget buildResumeGameButton(Data myProvider) {
     return Container(
       margin: EdgeInsets.all(blockMargin),
       padding: EdgeInsets.all(blockPadding),
       child: Table(
-        defaultColumnWidth: IntrinsicColumnWidth(),
+        defaultColumnWidth: const IntrinsicColumnWidth(),
         children: [
           TableRow(
             children: [
@@ -134,18 +133,18 @@ class Parameters {
   }
 
   static Widget buildParameterSelector(Data myProvider, String parameterCode) {
-    List availableValues = myProvider.getParameterAvailableValues(parameterCode);
+    List<String> availableValues = myProvider.getParameterAvailableValues(parameterCode);
 
     if (availableValues.length == 1) {
-      return SizedBox(height: 0.0);
+      return const SizedBox(height: 0.0);
     }
 
     return Table(
-      defaultColumnWidth: IntrinsicColumnWidth(),
+      defaultColumnWidth: const IntrinsicColumnWidth(),
       children: [
         TableRow(
           children: [
-            for (var index = 0; index < availableValues.length; index++)
+            for (int index = 0; index < availableValues.length; index++)
               Column(
                 children: [
                   _buildParameterButton(myProvider, parameterCode, availableValues[index])
@@ -162,7 +161,7 @@ class Parameters {
     String currentValue = myProvider.getParameterValue(parameterCode).toString();
 
     bool isActive = (parameterValue == currentValue);
-    String imageAsset = parameterCode + '_' + parameterValue;
+    String imageAsset = '${parameterCode}_$parameterValue';
 
     return TextButton(
       child: Container(
diff --git a/lib/main.dart b/lib/main.dart
index 867441b06fb9afb9c6e3494c356b64c9d2506457..b2ecccb6d0cc7b0c09c9b602e7dfebddff56d48b 100644
--- a/lib/main.dart
+++ b/lib/main.dart
@@ -1,17 +1,20 @@
 import 'package:flutter/material.dart';
 import 'package:flutter/services.dart';
-import 'package:minehunter/provider/data.dart';
-import 'package:minehunter/screens/home.dart';
 import 'package:provider/provider.dart';
 import 'package:overlay_support/overlay_support.dart';
 
+import 'package:minehunter/provider/data.dart';
+import 'package:minehunter/screens/home.dart';
+
 void main() {
   WidgetsFlutterBinding.ensureInitialized();
   SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp])
-      .then((value) => runApp(MyApp()));
+      .then((value) => runApp(const MyApp()));
 }
 
 class MyApp extends StatelessWidget {
+  const MyApp({super.key});
+
   @override
   Widget build(BuildContext context) {
     return ChangeNotifierProvider(
@@ -24,9 +27,9 @@ class MyApp extends StatelessWidget {
               primaryColor: Colors.blue,
               visualDensity: VisualDensity.adaptivePlatformDensity,
             ),
-            home: Home(),
+            home: const Home(),
             routes: {
-              Home.id: (context) => Home(),
+              Home.id: (context) => const Home(),
             },
           ),
         );
diff --git a/lib/provider/data.dart b/lib/provider/data.dart
index 2fd520e8c21a8fff47cabacbe0a1772e5cbf92e5..f1a385a5902ef22e832e63dc269aee25af344ad7 100644
--- a/lib/provider/data.dart
+++ b/lib/provider/data.dart
@@ -1,29 +1,30 @@
 import 'dart:convert';
 
 import 'package:flutter/foundation.dart';
+import 'package:minehunter/entities/cell.dart';
 import 'package:shared_preferences/shared_preferences.dart';
 
 class Data extends ChangeNotifier {
   // Configuration available parameters
-  List _availableParameters = ['level', 'size', 'skin'];
-  List get availableParameters => _availableParameters;
+  final List<String> _availableParameters = ['level', 'size', 'skin'];
+  List<String> get availableParameters => _availableParameters;
 
   // Configuration available values
-  List _availableLevelValues = ['easy', 'medium', 'hard', 'nightmare'];
-  List _availableSizeValues = ['10x10', '15x15', '20x20'];
-  List _availableSkinValues = ['default'];
+  final List<String> _availableLevelValues = ['easy', 'medium', 'hard', 'nightmare'];
+  final List<String> _availableSizeValues = ['10x10', '15x15', '20x20'];
+  final List<String> _availableSkinValues = ['default'];
 
-  List get availableLevelValues => _availableLevelValues;
-  List get availableSizeValues => _availableSizeValues;
-  List get availableSkinValues => _availableSkinValues;
+  List<String> get availableLevelValues => _availableLevelValues;
+  List<String> get availableSizeValues => _availableSizeValues;
+  List<String> get availableSkinValues => _availableSkinValues;
 
   // Application default configuration
   String _parameterLevel = '';
-  String _parameterLevelDefault = 'medium';
+  final String _parameterLevelDefault = 'medium';
   String _parameterSize = '';
-  String _parameterSizeDefault = '15x15';
+  final String _parameterSizeDefault = '15x15';
   String _parameterSkin = '';
-  String _parameterSkinDefault = 'default';
+  final String _parameterSkinDefault = 'default';
 
   // Application current configuration
   String get parameterLevel => _parameterLevel;
@@ -36,7 +37,7 @@ class Data extends ChangeNotifier {
   bool _animationInProgress = false;
   int _sizeVertical = 0;
   int _sizeHorizontal = 0;
-  List _cells = [];
+  List<List<Cell>> _cells = [];
   bool _isBoardMined = false;
   int _minesCount = 0;
   bool _reportMode = false;
@@ -82,7 +83,7 @@ class Data extends ChangeNotifier {
     return '';
   }
 
-  List getParameterAvailableValues(String parameterCode) {
+  List<String> getParameterAvailableValues(String parameterCode) {
     switch (parameterCode) {
       case 'level':
         {
@@ -135,8 +136,8 @@ class Data extends ChangeNotifier {
 
   String computeCurrentGameState() {
     String cellsValues = '';
-    for (var rowIndex = 0; rowIndex < _cells.length; rowIndex++) {
-      for (var colIndex = 0; colIndex < _cells[rowIndex].length; colIndex++) {
+    for (int rowIndex = 0; rowIndex < _cells.length; rowIndex++) {
+      for (int colIndex = 0; colIndex < _cells[rowIndex].length; colIndex++) {
         cellsValues += _cells[rowIndex][colIndex].isMined ? 'X' : ' ';
         cellsValues += _cells[rowIndex][colIndex].isExplored ? 'E' : ' ';
         cellsValues += _cells[rowIndex][colIndex].isMarked ? 'P' : ' ';
@@ -215,8 +216,8 @@ class Data extends ChangeNotifier {
     notifyListeners();
   }
 
-  List get cells => _cells;
-  void updateCells(List cells) {
+  List<List<Cell>> get cells => _cells;
+  void updateCells(List<List<Cell>> cells) {
     _cells = cells;
     notifyListeners();
   }
@@ -268,8 +269,8 @@ class Data extends ChangeNotifier {
   }
 
   void setAnimatedBackground(List animatedCellsPattern) {
-    for (var row = 0; row < _sizeVertical; row++) {
-      for (var col = 0; col < _sizeHorizontal; col++) {
+    for (int row = 0; row < _sizeVertical; row++) {
+      for (int col = 0; col < _sizeHorizontal; col++) {
         _cells[row][col].isAnimated = animatedCellsPattern[row][col];
       }
     }
@@ -277,8 +278,8 @@ class Data extends ChangeNotifier {
   }
 
   void resetAnimatedBackground() {
-    for (var row = 0; row < _sizeVertical; row++) {
-      for (var col = 0; col < _sizeHorizontal; col++) {
+    for (int row = 0; row < _sizeVertical; row++) {
+      for (int col = 0; col < _sizeHorizontal; col++) {
         _cells[row][col].isAnimated = false;
       }
     }
diff --git a/lib/screens/home.dart b/lib/screens/home.dart
index 1fd28a38919addb9bdc24cdcc07434f078d8280e..fa7236ac84c423b7ed4f47debfbc436ed7e6050a 100644
--- a/lib/screens/home.dart
+++ b/lib/screens/home.dart
@@ -1,19 +1,22 @@
 import 'package:flutter/material.dart';
+import 'package:provider/provider.dart';
+import 'package:overlay_support/overlay_support.dart';
+
 import 'package:minehunter/layout/game.dart';
 import 'package:minehunter/layout/parameters.dart';
 import 'package:minehunter/provider/data.dart';
 import 'package:minehunter/utils/game_utils.dart';
-import 'package:provider/provider.dart';
-import 'package:overlay_support/overlay_support.dart';
 
 class Home extends StatefulWidget {
+  const Home({super.key});
+
   static const String id = 'home';
 
   @override
-  _HomeState createState() => _HomeState();
+  HomeState createState() => HomeState();
 }
 
-class _HomeState extends State<Home> {
+class HomeState extends State<Home> {
   @override
   void initState() {
     super.initState();
@@ -22,21 +25,27 @@ class _HomeState extends State<Home> {
     myProvider.initParametersValues();
   }
 
-  List getImagesAssets(Data myProvider) {
-    List assets = [];
+  List<String> getImagesAssets(Data myProvider) {
+    final List<String> assets = [];
 
-    List gameImages = [
+    final List<String> gameImages = [
       'button_back',
       'button_start',
       'game_fail',
       'game_win',
     ];
-    myProvider.availableLevelValues.forEach((level) => gameImages.add('level_' + level));
-    myProvider.availableSizeValues.forEach((size) => gameImages.add('size_' + size));
+    for (String level in myProvider.availableLevelValues) {
+      gameImages.add('level_$level');
+    }
+    for (String size in myProvider.availableSizeValues) {
+      gameImages.add('size_$size');
+    }
 
-    gameImages.forEach((image) => assets.add('assets/icons/' + image + '.png'));
+    for (String image in gameImages) {
+      assets.add('${'assets/icons/$image'}.png');
+    }
 
-    List skinImages = [
+    final List<String> skinImages = [
       'button_mark_mine_off',
       'button_mark_mine_on',
       'indicator_report_on',
@@ -51,10 +60,12 @@ class _HomeState extends State<Home> {
       'tile_unknown',
     ];
     for (int value = 0; value < 9; value++) {
-      skinImages.add('tile_' + value.toString());
+      skinImages.add('tile_$value');
     }
 
-    skinImages.forEach((image) => assets.add('assets/skins/default_' + image + '.png'));
+    for (String image in skinImages) {
+      assets.add('${'assets/skins/default_$image'}.png');
+    }
 
     assets.add('assets/skins/default_empty.png');
 
@@ -63,29 +74,27 @@ class _HomeState extends State<Home> {
 
   @override
   Widget build(BuildContext context) {
-    Data myProvider = Provider.of<Data>(context);
+    final Data myProvider = Provider.of<Data>(context);
 
     if (!myProvider.assetsPreloaded) {
-      List assets = getImagesAssets(myProvider);
-      assets.forEach((asset) => precacheImage(AssetImage(asset), context));
+      final List<String> assets = getImagesAssets(myProvider);
+      for (String asset in assets) {
+        precacheImage(AssetImage(asset), context);
+      }
       myProvider.updateAssetsPreloaded(true);
     }
 
-    List<Widget> menuActions = [];
+    final List<Widget> menuActions = [];
 
     if (myProvider.gameIsRunning) {
-      menuActions = [
-        TextButton(
-          child: Container(
-            child: Image(
-              image: AssetImage('assets/icons/button_back.png'),
-              fit: BoxFit.fill,
-            ),
-          ),
-          onPressed: () => toast('Long press to quit game...'),
-          onLongPress: () => GameUtils.quitGame(myProvider),
+      menuActions.add(TextButton(
+        child: const Image(
+          image: AssetImage('assets/icons/button_back.png'),
+          fit: BoxFit.fill,
         ),
-      ];
+        onPressed: () => toast('Long press to quit game...'),
+        onLongPress: () => GameUtils.quitGame(myProvider),
+      ));
     }
 
     return Scaffold(
diff --git a/lib/utils/board_animate.dart b/lib/utils/board_animate.dart
index 5a83bfcda89ea5632a14e197970609052eb5a600..a85c2de5a9cdb5cb52e9196d5a8773620e7822f9 100644
--- a/lib/utils/board_animate.dart
+++ b/lib/utils/board_animate.dart
@@ -5,18 +5,18 @@ import 'package:minehunter/provider/data.dart';
 
 class BoardAnimate {
   // Start game animation: blinking tiles
-  static List createStartGameAnimationPatterns(Data myProvider) {
-    List<List> patterns = [];
-
-    int patternsCount = 4;
-    int sizeHorizontal = myProvider.sizeHorizontal;
-    int sizeVertical = myProvider.sizeVertical;
-
-    for (var patternIndex = 0; patternIndex < patternsCount; patternIndex++) {
-      List<List> pattern = [];
-      for (var row = 0; row < sizeVertical; row++) {
-        List<bool> patternRow = [];
-        for (var col = 0; col < sizeHorizontal; col++) {
+  static List<List<List<bool>>> createStartGameAnimationPatterns(Data myProvider) {
+    final List<List<List<bool>>> patterns = [];
+
+    const int patternsCount = 4;
+    final int sizeHorizontal = myProvider.sizeHorizontal;
+    final int sizeVertical = myProvider.sizeVertical;
+
+    for (int patternIndex = 0; patternIndex < patternsCount; patternIndex++) {
+      final List<List<bool>> pattern = [];
+      for (int row = 0; row < sizeVertical; row++) {
+        final List<bool> patternRow = [];
+        for (int col = 0; col < sizeHorizontal; col++) {
           patternRow.add(((patternIndex + row + col) % 2 == 0));
         }
         pattern.add(patternRow);
@@ -28,33 +28,33 @@ class BoardAnimate {
   }
 
   // Failed game animation: explosions blowing from exploded mines
-  static List createExplosionAnimationPatterns(Data myProvider) {
-    List<List> patterns = [];
+  static List<List<List<bool>>> createExplosionAnimationPatterns(Data myProvider) {
+    final List<List<List<bool>>> patterns = [];
 
-    int sizeHorizontal = myProvider.sizeHorizontal;
-    int sizeVertical = myProvider.sizeVertical;
+    final int sizeHorizontal = myProvider.sizeHorizontal;
+    final int sizeVertical = myProvider.sizeVertical;
 
-    List explodedMines = [];
-    for (var row = 0; row < sizeVertical; row++) {
-      for (var col = 0; col < sizeHorizontal; col++) {
+    final List<List<int>> explodedMines = [];
+    for (int row = 0; row < sizeVertical; row++) {
+      for (int col = 0; col < sizeHorizontal; col++) {
         if (myProvider.cells[row][col].isExploded) {
           explodedMines.add([row, col]);
         }
       }
     }
-    if (explodedMines.length == 0) {
+    if (explodedMines.isEmpty) {
       explodedMines.add([(sizeVertical / 2).floor(), (sizeHorizontal / 2).floor()]);
     }
 
-    int patternsCount = max(sizeHorizontal, sizeVertical);
+    final int patternsCount = max(sizeHorizontal, sizeVertical);
 
-    for (var patternIndex = 0; patternIndex < patternsCount; patternIndex++) {
-      List<List> pattern = [];
-      for (var row = 0; row < sizeVertical; row++) {
-        List<bool> patternRow = [];
-        for (var col = 0; col < sizeHorizontal; col++) {
+    for (int patternIndex = 0; patternIndex < patternsCount; patternIndex++) {
+      final List<List<bool>> pattern = [];
+      for (int row = 0; row < sizeVertical; row++) {
+        final List<bool> patternRow = [];
+        for (int col = 0; col < sizeHorizontal; col++) {
           bool isHilighted = false;
-          for (var mineIndex = 0; mineIndex < explodedMines.length; mineIndex++) {
+          for (int mineIndex = 0; mineIndex < explodedMines.length; mineIndex++) {
             double distance = sqrt(pow((explodedMines[mineIndex][0] - row), 2) +
                 pow((explodedMines[mineIndex][1] - col), 2));
             isHilighted = isHilighted || ((patternIndex + distance) % 4 < 2);
@@ -70,18 +70,18 @@ class BoardAnimate {
   }
 
   // Win game animation: rotating rays from center
-  static List createWinGameAnimationPatterns(Data myProvider) {
-    List<List> patterns = [];
+  static List<List<List<bool>>> createWinGameAnimationPatterns(Data myProvider) {
+    final List<List<List<bool>>> patterns = [];
 
-    int patternsCount = 20;
-    int sizeHorizontal = myProvider.sizeHorizontal;
-    int sizeVertical = myProvider.sizeVertical;
+    const int patternsCount = 20;
+    final int sizeHorizontal = myProvider.sizeHorizontal;
+    final int sizeVertical = myProvider.sizeVertical;
 
-    for (var patternIndex = 0; patternIndex < patternsCount; patternIndex++) {
-      List<List> pattern = [];
-      for (var row = 0; row < sizeVertical; row++) {
+    for (int patternIndex = 0; patternIndex < patternsCount; patternIndex++) {
+      List<List<bool>> pattern = [];
+      for (int row = 0; row < sizeVertical; row++) {
         List<bool> patternRow = [];
-        for (var col = 0; col < sizeHorizontal; col++) {
+        for (int col = 0; col < sizeHorizontal; col++) {
           double angle = 2 * atan2((sizeVertical / 2) - col, (sizeHorizontal / 2) - row);
           patternRow.add((angle + patternIndex / 3) % 2 < 1);
         }
@@ -94,18 +94,18 @@ class BoardAnimate {
   }
 
   // Default multi-purpose animation: sliding stripes, from top left to right bottom
-  static List createDefaultAnimationPatterns(Data myProvider) {
-    List<List> patterns = [];
-
-    int patternsCount = 16;
-    int sizeHorizontal = myProvider.sizeHorizontal;
-    int sizeVertical = myProvider.sizeVertical;
-
-    for (var patternIndex = 0; patternIndex < patternsCount; patternIndex++) {
-      List<List> pattern = [];
-      for (var row = 0; row < sizeVertical; row++) {
-        List<bool> patternRow = [];
-        for (var col = 0; col < sizeHorizontal; col++) {
+  static List<List<List<bool>>> createDefaultAnimationPatterns(Data myProvider) {
+    final List<List<List<bool>>> patterns = [];
+
+    const int patternsCount = 16;
+    final int sizeHorizontal = myProvider.sizeHorizontal;
+    final int sizeVertical = myProvider.sizeVertical;
+
+    for (int patternIndex = 0; patternIndex < patternsCount; patternIndex++) {
+      final List<List<bool>> pattern = [];
+      for (int row = 0; row < sizeVertical; row++) {
+        final List<bool> patternRow = [];
+        for (int col = 0; col < sizeHorizontal; col++) {
           patternRow.add(((patternIndex + row + col) % 4 == 0));
         }
         pattern.add(patternRow);
@@ -117,7 +117,7 @@ class BoardAnimate {
   }
 
   static void startAnimation(Data myProvider, String animationType) {
-    List patterns = [];
+    List<List<List<bool>>> patterns = [];
 
     switch (animationType) {
       case 'start':
@@ -133,21 +133,21 @@ class BoardAnimate {
         patterns = createDefaultAnimationPatterns(myProvider);
     }
 
-    int _patternIndex = patterns.length;
+    int patternIndex = patterns.length;
 
     myProvider.updateAnimationInProgress(true);
 
-    const interval = const Duration(milliseconds: 200);
+    const interval = Duration(milliseconds: 200);
     Timer.periodic(
       interval,
       (Timer timer) {
-        if (_patternIndex == 0) {
+        if (patternIndex == 0) {
           timer.cancel();
           myProvider.resetAnimatedBackground();
           myProvider.updateAnimationInProgress(false);
         } else {
-          _patternIndex--;
-          myProvider.setAnimatedBackground(patterns[_patternIndex]);
+          patternIndex--;
+          myProvider.setAnimatedBackground(patterns[patternIndex]);
         }
       },
     );
diff --git a/lib/utils/board_utils.dart b/lib/utils/board_utils.dart
index 42437b1926df2411bef07abb3b4d3af95e0b64ac..c0300ad5cf96f0a1db4dc56a92c1493f3b1725e2 100644
--- a/lib/utils/board_utils.dart
+++ b/lib/utils/board_utils.dart
@@ -5,24 +5,24 @@ import 'package:minehunter/provider/data.dart';
 
 class BoardUtils {
   static printGrid(List cells) {
-    final String isMined = 'X';
-    final String isSafe = '.';
+    const String isMined = 'X';
+    const String isSafe = '.';
 
-    final String mineFound = '#';
-    final String wrongMarkedCell = '0';
-    final String exploredSafeCell = '.';
-    final String unkownState = ' ';
+    const String mineFound = '#';
+    const String wrongMarkedCell = '0';
+    const String exploredSafeCell = '.';
+    const String unkownState = ' ';
 
     print('');
     String line = '--';
-    for (var i = 0; i < cells[0].length; i++) {
+    for (int i = 0; i < cells[0].length; i++) {
       line += '-';
     }
-    print(line + '  ' + line);
-    for (var rowIndex = 0; rowIndex < cells.length; rowIndex++) {
+    print('$line  $line');
+    for (int rowIndex = 0; rowIndex < cells.length; rowIndex++) {
       String currentLine = '';
       String solvedLine = '';
-      for (var colIndex = 0; colIndex < cells[rowIndex].length; colIndex++) {
+      for (int colIndex = 0; colIndex < cells[rowIndex].length; colIndex++) {
         solvedLine += cells[rowIndex][colIndex].isMined ? isMined : isSafe;
 
         String cellString = unkownState;
@@ -38,17 +38,17 @@ class BoardUtils {
         }
         currentLine += cellString;
       }
-      print('|' + currentLine + '|  |' + solvedLine + '|');
+      print('|$currentLine|  |$solvedLine|');
     }
-    print(line + '  ' + line);
+    print('$line  $line');
     print('');
   }
 
-  static List createEmptyBoard(int sizeHorizontal, int sizeVertical) {
-    List cells = [];
-    for (var rowIndex = 0; rowIndex < sizeVertical; rowIndex++) {
-      List row = [];
-      for (var colIndex = 0; colIndex < sizeHorizontal; colIndex++) {
+  static List<List<Cell>> createEmptyBoard(int sizeHorizontal, int sizeVertical) {
+    final List<List<Cell>> cells = [];
+    for (int rowIndex = 0; rowIndex < sizeVertical; rowIndex++) {
+      final List<Cell> row = [];
+      for (int colIndex = 0; colIndex < sizeHorizontal; colIndex++) {
         row.add(Cell(false));
       }
       cells.add(row);
@@ -82,9 +82,9 @@ class BoardUtils {
         break;
     }
 
-    int minesCount = ((sizeHorizontal * sizeVertical) * minesCountRatio / 100).round();
+    final int minesCount = ((sizeHorizontal * sizeVertical) * minesCountRatio / 100).round();
 
-    print('Mines count: ' + minesCount.toString());
+    print('Mines count: $minesCount');
 
     return minesCount;
   }
@@ -95,15 +95,15 @@ class BoardUtils {
         .updateCells(createEmptyBoard(myProvider.sizeHorizontal, myProvider.sizeVertical));
   }
 
-  static List createBoard(Data myProvider, int forbiddenRow, int forbiddenCol) {
-    List cells = myProvider.cells;
-    int sizeHorizontal = myProvider.sizeHorizontal;
-    int sizeVertical = myProvider.sizeVertical;
+  static List<List<Cell>> createBoard(Data myProvider, int forbiddenRow, int forbiddenCol) {
+    final List<List<Cell>> cells = myProvider.cells;
+    final int sizeHorizontal = myProvider.sizeHorizontal;
+    final int sizeVertical = myProvider.sizeVertical;
 
     // Shuffle cells to put random mines, except on currently selected one
-    List allowedCells = [];
-    for (var row = 0; row < sizeVertical; row++) {
-      for (var col = 0; col < sizeHorizontal; col++) {
+    final List<List<int>> allowedCells = [];
+    for (int row = 0; row < sizeVertical; row++) {
+      for (int col = 0; col < sizeHorizontal; col++) {
         if (!((forbiddenRow == row) && (forbiddenCol == col))) {
           allowedCells.add([row, col]);
         }
@@ -112,13 +112,13 @@ class BoardUtils {
     allowedCells.shuffle();
 
     // Put random mines on board
-    for (var mineIndex = 0; mineIndex < myProvider.minesCount; mineIndex++) {
+    for (int mineIndex = 0; mineIndex < myProvider.minesCount; mineIndex++) {
       cells[allowedCells[mineIndex][0]][allowedCells[mineIndex][1]].isMined = true;
     }
 
     // Compute all mines counts on cells
-    for (var row = 0; row < sizeVertical; row++) {
-      for (var col = 0; col < sizeHorizontal; col++) {
+    for (int row = 0; row < sizeVertical; row++) {
+      for (int col = 0; col < sizeHorizontal; col++) {
         cells[row][col].minesCountAround = getMinesCountAround(cells, row, col);
       }
     }
@@ -128,21 +128,21 @@ class BoardUtils {
     return cells;
   }
 
-  static List createBoardFromSavedState(Data myProvider, String savedBoard) {
-    List<List<Cell?>> board = [];
-    int boardSize = pow((savedBoard.length / 6), 1 / 2).round();
-    String boardSizeAsString = boardSize.toString() + 'x' + boardSize.toString();
+  static List<List<Cell>> createBoardFromSavedState(Data myProvider, String savedBoard) {
+    final List<List<Cell>> board = [];
+    final int boardSize = pow((savedBoard.length / 6), 1 / 2).round();
+    final String boardSizeAsString = '${boardSize}x$boardSize';
     myProvider.updateParameterSize(boardSizeAsString);
 
     int index = 0;
-    for (var rowIndex = 0; rowIndex < boardSize; rowIndex++) {
-      List<Cell?> row = [];
-      for (var colIndex = 0; colIndex < boardSize; colIndex++) {
-        bool isMined = (savedBoard[index++] == 'X');
-        bool isExplored = (savedBoard[index++] == 'E');
-        bool isMarked = (savedBoard[index++] == 'P');
-        bool isExploded = (savedBoard[index++] == '*');
-        int minesCountAround = int.parse(savedBoard[index++]);
+    for (int rowIndex = 0; rowIndex < boardSize; rowIndex++) {
+      final List<Cell> row = [];
+      for (int colIndex = 0; colIndex < boardSize; colIndex++) {
+        final bool isMined = (savedBoard[index++] == 'X');
+        final bool isExplored = (savedBoard[index++] == 'E');
+        final bool isMarked = (savedBoard[index++] == 'P');
+        final bool isExploded = (savedBoard[index++] == '*');
+        final int minesCountAround = int.parse(savedBoard[index++]);
         index++; // ";"
 
         Cell cell = Cell(isMined);
@@ -171,10 +171,10 @@ class BoardUtils {
     myProvider.setCellAsExplored(row, col);
 
     if (myProvider.cells[row][col].minesCountAround == 0) {
-      List safeCells = getAllSafeCellsAround(myProvider.cells, row, col);
-      for (var safeCellIndex = 0; safeCellIndex < safeCells.length; safeCellIndex++) {
-        int safeCellRow = safeCells[safeCellIndex][0];
-        int safeCellCol = safeCells[safeCellIndex][1];
+      final List<List<int>> safeCells = getAllSafeCellsAround(myProvider.cells, row, col);
+      for (int safeCellIndex = 0; safeCellIndex < safeCells.length; safeCellIndex++) {
+        final int safeCellRow = safeCells[safeCellIndex][0];
+        final int safeCellCol = safeCells[safeCellIndex][1];
         if (!myProvider.cells[safeCellRow][safeCellCol].isExplored) {
           walkOnCell(myProvider, safeCellRow, safeCellCol);
         }
@@ -182,17 +182,17 @@ class BoardUtils {
     }
   }
 
-  static List getAllSafeCellsAround(List cells, int row, int col) {
-    int sizeHorizontal = cells.length;
-    int sizeVertical = cells[0].length;
+  static List<List<int>> getAllSafeCellsAround(List cells, int row, int col) {
+    final int sizeHorizontal = cells.length;
+    final int sizeVertical = cells[0].length;
 
-    List safeCellsCoordinates = [];
+    final List<List<int>> safeCellsCoordinates = [];
 
     if (cells[row][col].minesCountAround == 0) {
-      for (var deltaRow = -1; deltaRow <= 1; deltaRow++) {
-        for (var deltaCol = -1; deltaCol <= 1; deltaCol++) {
-          int candidateRow = row + deltaRow;
-          int candidateCol = col + deltaCol;
+      for (int deltaRow = -1; deltaRow <= 1; deltaRow++) {
+        for (int deltaCol = -1; deltaCol <= 1; deltaCol++) {
+          final int candidateRow = row + deltaRow;
+          final int candidateCol = col + deltaCol;
           if ((candidateRow >= 0 && candidateRow < sizeVertical) &&
               (candidateCol >= 0 && candidateCol < sizeHorizontal) &&
               !cells[candidateRow][candidateCol].isExplored) {
@@ -206,12 +206,12 @@ class BoardUtils {
   }
 
   static int getMinesCountAround(List cells, int row, int col) {
-    int sizeHorizontal = cells.length;
-    int sizeVertical = cells[0].length;
+    final int sizeHorizontal = cells.length;
+    final int sizeVertical = cells[0].length;
 
     int minesCountAround = 0;
-    for (var deltaRow = -1; deltaRow <= 1; deltaRow++) {
-      for (var deltaCol = -1; deltaCol <= 1; deltaCol++) {
+    for (int deltaRow = -1; deltaRow <= 1; deltaRow++) {
+      for (int deltaCol = -1; deltaCol <= 1; deltaCol++) {
         if ((row + deltaRow >= 0 && row + deltaRow < sizeVertical) &&
             (col + deltaCol >= 0 && col + deltaCol < sizeHorizontal) &&
             (cells[row + deltaRow][col + deltaCol].isMined)) {
@@ -224,17 +224,17 @@ class BoardUtils {
   }
 
   static bool checkGameIsFinished(Data myProvider) {
-    List cells = myProvider.cells;
-    int sizeHorizontal = cells.length;
-    int sizeVertical = cells[0].length;
+    final List<List<Cell>> cells = myProvider.cells;
+    final int sizeHorizontal = cells.length;
+    final int sizeVertical = cells[0].length;
 
     printGrid(cells);
 
     myProvider.updateGameWin(false);
     myProvider.updateGameFail(false);
 
-    for (var row = 0; row < sizeVertical; row++) {
-      for (var col = 0; col < sizeHorizontal; col++) {
+    for (int row = 0; row < sizeVertical; row++) {
+      for (int col = 0; col < sizeHorizontal; col++) {
         // Walked on a mine
         if (cells[row][col].isExploded == true) {
           myProvider.updateGameFail(true);
@@ -243,8 +243,8 @@ class BoardUtils {
       }
     }
 
-    for (var row = 0; row < sizeVertical; row++) {
-      for (var col = 0; col < sizeHorizontal; col++) {
+    for (int row = 0; row < sizeVertical; row++) {
+      for (int col = 0; col < sizeHorizontal; col++) {
         if (
             // Mine not already found
             (cells[row][col].isMined == true && cells[row][col].isMarked == false) ||
@@ -264,10 +264,10 @@ class BoardUtils {
   static int countFlaggedCells(List cells) {
     int count = 0;
 
-    int sizeHorizontal = cells.length;
-    int sizeVertical = cells[0].length;
-    for (var row = 0; row < sizeVertical; row++) {
-      for (var col = 0; col < sizeHorizontal; col++) {
+    final int sizeHorizontal = cells.length;
+    final int sizeVertical = cells[0].length;
+    for (int row = 0; row < sizeVertical; row++) {
+      for (int col = 0; col < sizeHorizontal; col++) {
         if (cells[row][col].isMarked == true) {
           count++;
         }
diff --git a/lib/utils/game_utils.dart b/lib/utils/game_utils.dart
index 107cff4fa714f2c8769db349954b52953860c307..03ea28ffece8c44e05adec66105725b3193f4451 100644
--- a/lib/utils/game_utils.dart
+++ b/lib/utils/game_utils.dart
@@ -11,7 +11,7 @@ class GameUtils {
   }
 
   static void startNewGame(Data myProvider) {
-    print('Starting game: ' + myProvider.parameterSize + ' - ' + myProvider.parameterLevel);
+    print('Starting game: ${myProvider.parameterSize} - ${myProvider.parameterLevel}');
     myProvider.updateParameterSize(myProvider.parameterSize);
     myProvider.updateMinesCount(BoardUtils.getMinesCount(
         myProvider.sizeHorizontal, myProvider.sizeVertical, myProvider.parameterLevel));
diff --git a/pubspec.lock b/pubspec.lock
index f78ae3bfbc5b91625f56452dcbc944e3e78db356..f2dad354fa91396500fef3d18d03b00e93cac1bf 100644
--- a/pubspec.lock
+++ b/pubspec.lock
@@ -21,52 +21,68 @@ packages:
     dependency: transitive
     description:
       name: collection
-      sha256: f092b211a4319e98e5ff58223576de6c2803db36221657b46c82574721240687
+      sha256: ee67cb0715911d28db6bf4af1026078bd6f0128b07a5f66fb2ed94ec6783c09a
       url: "https://pub.dev"
     source: hosted
-    version: "1.17.2"
+    version: "1.18.0"
   ffi:
     dependency: transitive
     description:
       name: ffi
-      sha256: "7bf0adc28a23d395f19f3f1eb21dd7cfd1dd9f8e1c50051c069122e6853bc878"
+      sha256: "493f37e7df1804778ff3a53bd691d8692ddf69702cf4c1c1096a2e41b4779e21"
       url: "https://pub.dev"
     source: hosted
-    version: "2.1.0"
+    version: "2.1.2"
   file:
     dependency: transitive
     description:
       name: file
-      sha256: "1b92bec4fc2a72f59a8e15af5f52cd441e4a7860b49499d69dfa817af20e925d"
+      sha256: "5fc22d7c25582e38ad9a8515372cd9a93834027aacf1801cf01164dac0ffa08c"
       url: "https://pub.dev"
     source: hosted
-    version: "6.1.4"
+    version: "7.0.0"
   flutter:
     dependency: "direct main"
     description: flutter
     source: sdk
     version: "0.0.0"
+  flutter_lints:
+    dependency: "direct dev"
+    description:
+      name: flutter_lints
+      sha256: e2a421b7e59244faef694ba7b30562e489c2b489866e505074eb005cd7060db7
+      url: "https://pub.dev"
+    source: hosted
+    version: "3.0.1"
   flutter_web_plugins:
     dependency: transitive
     description: flutter
     source: sdk
     version: "0.0.0"
+  lints:
+    dependency: transitive
+    description:
+      name: lints
+      sha256: cbf8d4b858bb0134ef3ef87841abdf8d63bfc255c266b7bf6b39daa1085c4290
+      url: "https://pub.dev"
+    source: hosted
+    version: "3.0.0"
   material_color_utilities:
     dependency: transitive
     description:
       name: material_color_utilities
-      sha256: "9528f2f296073ff54cb9fee677df673ace1218163c3bc7628093e7eed5203d41"
+      sha256: "0e0a020085b65b6083975e499759762399b4475f766c21668c4ecca34ea74e5a"
       url: "https://pub.dev"
     source: hosted
-    version: "0.5.0"
+    version: "0.8.0"
   meta:
     dependency: transitive
     description:
       name: meta
-      sha256: "3c74dbf8763d36539f114c799d8a2d87343b5067e9d796ca22b5eb8437090ee3"
+      sha256: d584fa6707a52763a52446f02cc621b077888fb63b93bbcb1143a7be5a0c0c04
       url: "https://pub.dev"
     source: hosted
-    version: "1.9.1"
+    version: "1.11.0"
   nested:
     dependency: transitive
     description:
@@ -87,10 +103,10 @@ packages:
     dependency: transitive
     description:
       name: path
-      sha256: "8829d8a55c13fc0e37127c29fedf290c102f4e40ae94ada574091fe0ff96c917"
+      sha256: "087ce49c3f0dc39180befefc60fdb4acd8f8620e5682fe2476afd0b3688bb4af"
       url: "https://pub.dev"
     source: hosted
-    version: "1.8.3"
+    version: "1.9.0"
   path_provider_linux:
     dependency: transitive
     description:
@@ -103,10 +119,10 @@ packages:
     dependency: transitive
     description:
       name: path_provider_platform_interface
-      sha256: "94b1e0dd80970c1ce43d5d4e050a9918fce4f4a775e6142424c30a29a363265c"
+      sha256: "88f5779f72ba699763fa3a3b06aa4bf6de76c8e5de842cf6f29e2e06476c2334"
       url: "https://pub.dev"
     source: hosted
-    version: "2.1.1"
+    version: "2.1.2"
   path_provider_windows:
     dependency: transitive
     description:
@@ -119,34 +135,34 @@ packages:
     dependency: transitive
     description:
       name: platform
-      sha256: ae68c7bfcd7383af3629daafb32fb4e8681c7154428da4febcff06200585f102
+      sha256: "12220bb4b65720483f8fa9450b4332347737cf8213dd2840d8b2c823e47243ec"
       url: "https://pub.dev"
     source: hosted
-    version: "3.1.2"
+    version: "3.1.4"
   plugin_platform_interface:
     dependency: transitive
     description:
       name: plugin_platform_interface
-      sha256: da3fdfeccc4d4ff2da8f8c556704c08f912542c5fb3cf2233ed75372384a034d
+      sha256: "4820fbfdb9478b1ebae27888254d445073732dae3d6ea81f0b7e06d5dedc3f02"
       url: "https://pub.dev"
     source: hosted
-    version: "2.1.6"
+    version: "2.1.8"
   provider:
     dependency: "direct main"
     description:
       name: provider
-      sha256: cdbe7530b12ecd9eb455bdaa2fcb8d4dad22e80b8afb4798b41479d5ce26847f
+      sha256: "9a96a0a19b594dbc5bf0f1f27d2bc67d5f95957359b461cd9feb44ed6ae75096"
       url: "https://pub.dev"
     source: hosted
-    version: "6.0.5"
+    version: "6.1.1"
   shared_preferences:
     dependency: "direct main"
     description:
       name: shared_preferences
-      sha256: b7f41bad7e521d205998772545de63ff4e6c97714775902c199353f8bf1511ac
+      sha256: "81429e4481e1ccfb51ede496e916348668fd0921627779233bd24cc3ff6abd02"
       url: "https://pub.dev"
     source: hosted
-    version: "2.2.1"
+    version: "2.2.2"
   shared_preferences_android:
     dependency: transitive
     description:
@@ -159,42 +175,42 @@ packages:
     dependency: transitive
     description:
       name: shared_preferences_foundation
-      sha256: "7bf53a9f2d007329ee6f3df7268fd498f8373602f943c975598bbb34649b62a7"
+      sha256: "7708d83064f38060c7b39db12aefe449cb8cdc031d6062280087bc4cdb988f5c"
       url: "https://pub.dev"
     source: hosted
-    version: "2.3.4"
+    version: "2.3.5"
   shared_preferences_linux:
     dependency: transitive
     description:
       name: shared_preferences_linux
-      sha256: c2eb5bf57a2fe9ad6988121609e47d3e07bb3bdca5b6f8444e4cf302428a128a
+      sha256: "9f2cbcf46d4270ea8be39fa156d86379077c8a5228d9dfdb1164ae0bb93f1faa"
       url: "https://pub.dev"
     source: hosted
-    version: "2.3.1"
+    version: "2.3.2"
   shared_preferences_platform_interface:
     dependency: transitive
     description:
       name: shared_preferences_platform_interface
-      sha256: d4ec5fc9ebb2f2e056c617112aa75dcf92fc2e4faaf2ae999caa297473f75d8a
+      sha256: "22e2ecac9419b4246d7c22bfbbda589e3acf5c0351137d87dd2939d984d37c3b"
       url: "https://pub.dev"
     source: hosted
-    version: "2.3.1"
+    version: "2.3.2"
   shared_preferences_web:
     dependency: transitive
     description:
       name: shared_preferences_web
-      sha256: d762709c2bbe80626ecc819143013cc820fa49ca5e363620ee20a8b15a3e3daf
+      sha256: "7b15ffb9387ea3e237bb7a66b8a23d2147663d391cafc5c8f37b2e7b4bde5d21"
       url: "https://pub.dev"
     source: hosted
-    version: "2.2.1"
+    version: "2.2.2"
   shared_preferences_windows:
     dependency: transitive
     description:
       name: shared_preferences_windows
-      sha256: f763a101313bd3be87edffe0560037500967de9c394a714cd598d945517f694f
+      sha256: "841ad54f3c8381c480d0c9b508b89a34036f512482c407e6df7a9c4aa2ef8f59"
       url: "https://pub.dev"
     source: hosted
-    version: "2.3.1"
+    version: "2.3.2"
   sky_engine:
     dependency: transitive
     description: flutter
@@ -212,26 +228,26 @@ packages:
     dependency: transitive
     description:
       name: web
-      sha256: dc8ccd225a2005c1be616fe02951e2e342092edf968cf0844220383757ef8f10
+      sha256: "4188706108906f002b3a293509234588823c8c979dc83304e229ff400c996b05"
       url: "https://pub.dev"
     source: hosted
-    version: "0.1.4-beta"
+    version: "0.4.2"
   win32:
     dependency: transitive
     description:
       name: win32
-      sha256: "350a11abd2d1d97e0cc7a28a81b781c08002aa2864d9e3f192ca0ffa18b06ed3"
+      sha256: "464f5674532865248444b4c3daca12bd9bf2d7c47f759ce2617986e7229494a8"
       url: "https://pub.dev"
     source: hosted
-    version: "5.0.9"
+    version: "5.2.0"
   xdg_directories:
     dependency: transitive
     description:
       name: xdg_directories
-      sha256: "589ada45ba9e39405c198fe34eb0f607cddb2108527e658136120892beac46d2"
+      sha256: faea9dee56b520b55a566385b84f2e8de55e7496104adada9962e0bd11bcff1d
       url: "https://pub.dev"
     source: hosted
-    version: "1.0.3"
+    version: "1.0.4"
 sdks:
-  dart: ">=3.1.0-185.0.dev <4.0.0"
-  flutter: ">=3.7.0"
+  dart: ">=3.3.0-279.1.beta <4.0.0"
+  flutter: ">=3.16.0"
diff --git a/pubspec.yaml b/pubspec.yaml
index 9d68e2151be9cd5898ea3e6bfb868a9cb1bc8fca..e7f74ce0de3c6e7efc8fbbe9f54081aacbec4bd7 100644
--- a/pubspec.yaml
+++ b/pubspec.yaml
@@ -1,7 +1,7 @@
 name: minehunter
 description: A minehunter game application.
 publish_to: 'none'
-version: 1.0.0+1
+version: 0.1.13+34
 
 environment:
   sdk: '^3.0.0'
@@ -13,6 +13,9 @@ dependencies:
   shared_preferences: ^2.2.1
   overlay_support: ^2.1.0
 
+dev_dependencies:
+  flutter_lints: ^3.0.1
+
 flutter:
   uses-material-design: true
   assets: