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 458079a35ea757a32a2e6792007f7d1c0eaaec3e..647500ff7300bef5d03035145b64453a021cf724 100644
--- a/android/app/build.gradle
+++ b/android/app/build.gradle
@@ -44,7 +44,7 @@ android {
 
     defaultConfig {
         applicationId "org.benoitharrault.colors"
-        minSdkVersion 16
+        minSdkVersion flutter.minSdkVersion
         targetSdkVersion 30
         versionCode appVersionCode.toInteger()
         versionName appVersionName
diff --git a/android/gradle.properties b/android/gradle.properties
index 4878903faeac600353ec559be514de7d30376f55..9dfcc4273391875fdd4899077969cf717c1ace23 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.32
-app.versionCode=32
+app.versionName=0.0.33
+app.versionCode=33
diff --git a/fastlane/metadata/android/en-US/changelogs/33.txt b/fastlane/metadata/android/en-US/changelogs/33.txt
new file mode 100644
index 0000000000000000000000000000000000000000..6ab11150150fc75a46c9acc317890208e5a120b9
--- /dev/null
+++ b/fastlane/metadata/android/en-US/changelogs/33.txt
@@ -0,0 +1 @@
+Add automatic flutter linter. Apply code lints. Update dependencies.
diff --git a/fastlane/metadata/android/fr-FR/changelogs/33.txt b/fastlane/metadata/android/fr-FR/changelogs/33.txt
new file mode 100644
index 0000000000000000000000000000000000000000..609f5cf6e95a8df0799865df2e1ebde8fa981e5a
--- /dev/null
+++ b/fastlane/metadata/android/fr-FR/changelogs/33.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 b89ff47c54472f8baf9e90e8dafff4bbf9d22577..115dd0186c8010f29d42b486d9044a3cae91c595 100644
--- a/lib/entities/cell.dart
+++ b/lib/entities/cell.dart
@@ -10,10 +10,10 @@ class Cell {
   );
 
   Container widgetFillBoardWithColor(Data myProvider) {
-    String imageAsset = this.getImageAssetName(myProvider);
+    String imageAsset = getImageAssetName(myProvider);
 
     return Container(
-      margin: EdgeInsets.all(2),
+      margin: const EdgeInsets.all(2),
       decoration: BoxDecoration(
         border: Border.all(
           color: Colors.black,
@@ -27,8 +27,8 @@ class Cell {
         ),
         onTap: () {
           if (!myProvider.animationInProgress &&
-              myProvider.getFirstCellValue() != this.value) {
-            BoardUtils.fillBoardFromFirstCell(myProvider, this.value);
+              myProvider.getFirstCellValue() != value) {
+            BoardUtils.fillBoardFromFirstCell(myProvider, value);
           }
         },
       ),
@@ -36,7 +36,7 @@ class Cell {
   }
 
   String getImageAssetName(Data myProvider) {
-    int cellValue = this.value;
-    return 'assets/skins/' + myProvider.parameterSkin + '_' + cellValue.toString() + '.png';
+    int cellValue = value;
+    return 'assets/skins/${myProvider.parameterSkin}_$cellValue.png';
   }
 }
diff --git a/lib/layout/board.dart b/lib/layout/board.dart
index 0224d6d685c3ff7df936b8c16456f255ebc6daa4..7991c5ec19a6d34be2f427f999b2a69d30a4e684 100644
--- a/lib/layout/board.dart
+++ b/lib/layout/board.dart
@@ -6,33 +6,29 @@ import 'package:flutter/material.dart';
 class Board {
   static Container buildGameBoard(Data myProvider, double boardWidth) {
     return Container(
-      margin: EdgeInsets.all(4),
-      padding: EdgeInsets.all(4),
+      margin: const EdgeInsets.all(4),
+      padding: const EdgeInsets.all(4),
       child: Column(
         children: [
-          Container(
-            child: Center(
-              child: GestureDetector(
-                onTapUp: (details) {
-                  double xTap = details.localPosition.dx;
-                  double yTap = details.localPosition.dy;
-                  int boardSize = myProvider.boardSize;
-                  int col = xTap ~/ (boardWidth / boardSize);
-                  int row = yTap ~/ (boardWidth / boardSize);
-                  int cellValue = myProvider.getCellValue(col, row);
-                  BoardUtils.fillBoardFromFirstCell(myProvider, cellValue);
-                },
-                child: Container(
-                  child: CustomPaint(
-                    size: Size(boardWidth, boardWidth),
-                    willChange: false,
-                    painter: BoardPainter(myProvider),
-                    isComplex: true,
-                  ),
-                ),
+          Center(
+            child: GestureDetector(
+              onTapUp: (details) {
+                double xTap = details.localPosition.dx;
+                double yTap = details.localPosition.dy;
+                int boardSize = myProvider.boardSize;
+                int col = xTap ~/ (boardWidth / boardSize);
+                int row = yTap ~/ (boardWidth / boardSize);
+                int cellValue = myProvider.getCellValue(col, row);
+                BoardUtils.fillBoardFromFirstCell(myProvider, cellValue);
+              },
+              child: CustomPaint(
+                size: Size(boardWidth, boardWidth),
+                willChange: false,
+                painter: BoardPainter(myProvider),
+                isComplex: true,
               ),
             ),
-          )
+          ),
         ],
       ),
     );
diff --git a/lib/layout/board_painter.dart b/lib/layout/board_painter.dart
index e966e7c35c19c81768bccb1672f1a5d2e67b92e3..c955c700e5878d37111908e0a57ad4b73c2ec231 100644
--- a/lib/layout/board_painter.dart
+++ b/lib/layout/board_painter.dart
@@ -11,7 +11,7 @@ class BoardPainter extends CustomPainter {
   @override
   void paint(Canvas canvas, Size size) {
     int boardSize = myProvider.boardSize;
-    List cells = myProvider.cells;
+    List<List<Cell>> cells = myProvider.cells;
     double cellSize = size.width / boardSize;
 
     // background
diff --git a/lib/layout/game.dart b/lib/layout/game.dart
index 81b93d345a3adc2b77768be106e8cb477db4a7d4..d953163a3b10f71e6e266acb316ed248c2241144 100644
--- a/lib/layout/game.dart
+++ b/lib/layout/game.dart
@@ -5,37 +5,34 @@ import 'package:colors/utils/game_utils.dart';
 import 'package:flutter/material.dart';
 
 class Game {
-  static Container buildGameWidget(Data myProvider, double boardWidth) {
-    bool gameIsFinished = myProvider.isGameFinished();
+  static Widget buildGameWidget(Data myProvider, double boardWidth) {
+    final bool gameIsFinished = myProvider.isGameFinished();
 
-    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, boardWidth),
-          ),
-          SizedBox(height: 2),
-          Container(
-            child: gameIsFinished
-                ? Game.buildEndGameMessage(myProvider)
-                : Game.buildSelectColorBar(myProvider),
-          ),
-        ],
-      ),
+    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, boardWidth),
+        ),
+        const SizedBox(height: 2),
+        Container(
+          child: gameIsFinished
+              ? Game.buildEndGameMessage(myProvider)
+              : Game.buildSelectColorBar(myProvider),
+        ),
+      ],
     );
   }
 
   static Widget buildTopIndicatorWidget(Data myProvider) {
-    String progressIndicator =
-        myProvider.progress.toString() + '/' + myProvider.progressTotal.toString();
+    String progressIndicator = '${myProvider.progress}/${myProvider.progressTotal}';
 
     if (myProvider.movesCount > 0) {
-      progressIndicator += ' (+' + myProvider.progressDelta.toString() + ')';
+      progressIndicator += ' (+${myProvider.progressDelta})';
     }
 
     Color maxMovesCountColor = Colors.grey;
@@ -51,7 +48,7 @@ class Game {
               children: [
                 Text(
                   myProvider.movesCount.toString(),
-                  style: TextStyle(
+                  style: const TextStyle(
                     fontSize: 35,
                     fontWeight: FontWeight.w600,
                     color: Colors.black,
@@ -62,7 +59,7 @@ class Game {
             Column(
               children: [
                 Text(
-                  '(max: ' + myProvider.maxMovesCount.toString() + ')',
+                  '(max: ${myProvider.maxMovesCount})',
                   style: TextStyle(
                     fontSize: 15,
                     fontWeight: FontWeight.w600,
@@ -71,7 +68,7 @@ class Game {
                 ),
                 Text(
                   progressIndicator,
-                  style: TextStyle(
+                  style: const TextStyle(
                     fontSize: 15,
                     fontWeight: FontWeight.w600,
                     color: Colors.green,
@@ -85,14 +82,14 @@ class Game {
     );
   }
 
-  static Container buildSelectColorBar(Data myProvider) {
+  static Widget buildSelectColorBar(Data myProvider) {
     int maxValue = myProvider.colorsCount;
 
     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: [
@@ -112,9 +109,9 @@ class Game {
   static TextButton buildRestartGameButton(Data myProvider) {
     return TextButton(
       style: ButtonStyle(
-        padding: MaterialStateProperty.all<EdgeInsets>(EdgeInsets.all(0)),
+        padding: MaterialStateProperty.all<EdgeInsets>(const EdgeInsets.all(0)),
       ),
-      child: Image(
+      child: const Image(
         image: AssetImage('assets/icons/button_back.png'),
         fit: BoxFit.fill,
       ),
@@ -122,7 +119,7 @@ class Game {
     );
   }
 
-  static Container buildEndGameMessage(Data myProvider) {
+  static Widget buildEndGameMessage(Data myProvider) {
     String decorationImageAssetName = '';
     if (myProvider.gameWon) {
       decorationImageAssetName = 'assets/icons/game_win.png';
@@ -136,10 +133,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 f3fcc67effaf4b2184c20e05d789fde0a9c0fe84..c14295f101019d2e2bc3dd1d45bf92d03a018e66 100644
--- a/lib/layout/parameters.dart
+++ b/lib/layout/parameters.dart
@@ -14,39 +14,37 @@ 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;
+    List<String> parameters = myProvider.availableParameters;
     for (var index = 0; index < parameters.length; index++) {
       lines.add(Parameters.buildParameterSelector(myProvider, parameters[index]));
       lines.add(SizedBox(height: Parameters.separatorHeight));
     }
 
-    return Container(
-      child: Column(
-        mainAxisAlignment: MainAxisAlignment.start,
-        crossAxisAlignment: CrossAxisAlignment.center,
-        children: [
-          SizedBox(height: Parameters.separatorHeight),
-          Expanded(
-            child: Column(
-              mainAxisSize: MainAxisSize.min,
-              mainAxisAlignment: MainAxisAlignment.center,
-              children: lines,
-            ),
-          ),
-          SizedBox(height: Parameters.separatorHeight),
-          Container(
-            child: Parameters.buildStartGameButton(myProvider),
+    return Column(
+      mainAxisAlignment: MainAxisAlignment.start,
+      crossAxisAlignment: CrossAxisAlignment.center,
+      children: [
+        SizedBox(height: Parameters.separatorHeight),
+        Expanded(
+          child: Column(
+            mainAxisSize: MainAxisSize.min,
+            mainAxisAlignment: MainAxisAlignment.center,
+            children: lines,
           ),
-        ],
-      ),
+        ),
+        SizedBox(height: Parameters.separatorHeight),
+        Container(
+          child: Parameters.buildStartGameButton(myProvider),
+        ),
+      ],
     );
   }
 
-  static Container buildStartGameButton(Data myProvider) {
-    Column decorationImage = Column(
+  static Widget buildStartGameButton(Data myProvider) {
+    Column decorationImage = const Column(
       children: [
         Image(
           image: AssetImage('assets/icons/game_win.png'),
@@ -59,7 +57,7 @@ class Parameters {
       margin: EdgeInsets.all(Parameters.blockMargin),
       padding: EdgeInsets.all(Parameters.blockPadding),
       child: Table(
-        defaultColumnWidth: IntrinsicColumnWidth(),
+        defaultColumnWidth: const IntrinsicColumnWidth(),
         children: [
           TableRow(
             children: [
@@ -68,9 +66,9 @@ class Parameters {
                 children: [
                   TextButton(
                     style: ButtonStyle(
-                      padding: MaterialStateProperty.all<EdgeInsets>(EdgeInsets.all(0)),
+                      padding: MaterialStateProperty.all<EdgeInsets>(const EdgeInsets.all(0)),
                     ),
-                    child: Image(
+                    child: const Image(
                       image: AssetImage('assets/icons/button_start.png'),
                       fit: BoxFit.fill,
                     ),
@@ -87,14 +85,14 @@ 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: [
@@ -115,7 +113,7 @@ class Parameters {
     String currentValue = myProvider.getParameterValue(parameterCode).toString();
 
     bool isActive = (parameterValue == currentValue);
-    String imageAsset = 'assets/icons/' + parameterCode + '_' + parameterValue + '.png';
+    String imageAsset = 'assets/icons/${parameterCode}_$parameterValue.png';
 
     return TextButton(
       child: Container(
diff --git a/lib/main.dart b/lib/main.dart
index f1cbde49ed171cd24aa4f396a79d86c542f78857..07f193de2d50a7b851c7a7571992fba621a8245b 100644
--- a/lib/main.dart
+++ b/lib/main.dart
@@ -8,10 +8,12 @@ import 'package:overlay_support/overlay_support.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(
@@ -25,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 8bd370f2d6450630ed81f6d7af1491e00afd7d37..bb84b587a7dd46ea8c354c73727d59b2fd8ea0c3 100644
--- a/lib/provider/data.dart
+++ b/lib/provider/data.dart
@@ -1,31 +1,32 @@
+import 'package:colors/entities/cell.dart';
 import 'package:flutter/foundation.dart';
 import 'package:shared_preferences/shared_preferences.dart';
 
 class Data extends ChangeNotifier {
   // Configuration available parameters
-  List _availableParameters = ['level', 'size', 'colors', 'skin'];
-  List get availableParameters => _availableParameters;
+  final List<String> _availableParameters = ['level', 'size', 'colors', 'skin'];
+  List<String> get availableParameters => _availableParameters;
 
   // Configuration available values
-  List _availableLevelValues = ['easy', 'medium', 'hard', 'nightmare'];
-  List _availableSizeValues = ['small', 'medium', 'large', 'extra'];
-  List _availableColorsValues = ['5', '6', '7', '8'];
-  List _availableSkinValues = ['default'];
+  final List<String> _availableLevelValues = ['easy', 'medium', 'hard', 'nightmare'];
+  final List<String> _availableSizeValues = ['small', 'medium', 'large', 'extra'];
+  final List<String> _availableColorsValues = ['5', '6', '7', '8'];
+  final List<String> _availableSkinValues = ['default'];
 
-  List get availableLevelValues => _availableLevelValues;
-  List get availableSizeValues => _availableSizeValues;
-  List get availableColorsValues => _availableColorsValues;
-  List get availableSkinValues => _availableSkinValues;
+  List<String> get availableLevelValues => _availableLevelValues;
+  List<String> get availableSizeValues => _availableSizeValues;
+  List<String> get availableColorsValues => _availableColorsValues;
+  List<String> get availableSkinValues => _availableSkinValues;
 
   // Application default configuration
   String _parameterLevel = '';
-  String _parameterLevelDefault = 'medium';
+  final String _parameterLevelDefault = 'medium';
   String _parameterSize = '';
-  String _parameterSizeDefault = 'medium';
+  final String _parameterSizeDefault = 'medium';
   String _parameterColors = '';
-  String _parameterColorsDefault = '6';
+  final String _parameterColorsDefault = '6';
   String _parameterSkin = '';
-  String _parameterSkinDefault = 'default';
+  final String _parameterSkinDefault = 'default';
 
   // Application current configuration
   String get parameterLevel => _parameterLevel;
@@ -41,19 +42,19 @@ class Data extends ChangeNotifier {
   int _colorsCount = 0;
   int _movesCount = 0;
   int _maxMovesCount = 0;
-  List _cells = [];
+  List<List<Cell>> _cells = [];
 
   int _progress = 0;
   int _progressTotal = 0;
   int _progressDelta = 0;
 
-  bool isParameterValueAllowed(String parameterValue, List parametersAllowedValues) {
+  bool isParameterValueAllowed(String parameterValue, List<String> parametersAllowedValues) {
     bool found = false;
-    parametersAllowedValues.forEach((item) {
+    for (String item in parametersAllowedValues) {
       if (item.contains(parameterValue)) {
         found = true;
       }
-    });
+    }
     return found;
   }
 
@@ -117,7 +118,7 @@ class Data extends ChangeNotifier {
     return '';
   }
 
-  List getParameterAvailableValues(String parameterCode) {
+  List<String> getParameterAvailableValues(String parameterCode) {
     switch (parameterCode) {
       case 'level':
         {
@@ -251,8 +252,8 @@ class Data extends ChangeNotifier {
     _colorsCount = colorsCount;
   }
 
-  List get cells => _cells;
-  void updateCells(List cells) {
+  List<List<Cell>> get cells => _cells;
+  void updateCells(List<List<Cell>> cells) {
     _cells = cells;
     notifyListeners();
   }
diff --git a/lib/screens/home.dart b/lib/screens/home.dart
index ac80b664ad6ef0cf1095af4e7df84b3469109961..ff66a143f410a8d903d50f59c4eb39450a5994fc 100644
--- a/lib/screens/home.dart
+++ b/lib/screens/home.dart
@@ -7,13 +7,15 @@ import 'package:overlay_support/overlay_support.dart';
 import 'package:provider/provider.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();
@@ -32,11 +34,9 @@ class _HomeState extends State<Home> {
     if (myProvider.gameIsRunning) {
       menuActions = [
         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: () => toast('Long press to quit game...'),
           onLongPress: () => GameUtils.resetGame(myProvider),
diff --git a/lib/utils/board_utils.dart b/lib/utils/board_utils.dart
index 70bc9d6c69acbfe76d7c195b1cc37bf0f5050a7e..8e8f31bf21e54ad1da7cc59d5f81c3009b4683c1 100644
--- a/lib/utils/board_utils.dart
+++ b/lib/utils/board_utils.dart
@@ -24,11 +24,11 @@ class BoardUtils {
     int boardSize = myProvider.boardSize;
     int maxValue = myProvider.colorsCount;
 
-    var rand = new Random();
+    var rand = Random();
 
-    List grid = [];
+    List<List<Cell>> grid = [];
     for (var rowIndex = 0; rowIndex < boardSize; rowIndex++) {
-      List row = [];
+      List<Cell> row = [];
       for (var colIndex = 0; colIndex < boardSize; colIndex++) {
         int value = 1 + rand.nextInt(maxValue);
         row.add(Cell(value));
@@ -59,10 +59,10 @@ class BoardUtils {
   }
 
   static fillBoardFromFirstCell(Data myProvider, int value) {
-    List cellsToFill = BoardUtils.getSiblingFillableCells(myProvider, 0, 0, [
+    List<List<int>> cellsToFill = BoardUtils.getSiblingFillableCells(myProvider, 0, 0, [
       [0, 0]
     ]);
-    int progressBeforeMove = cellsToFill.length;
+    final int progressBeforeMove = cellsToFill.length;
 
     myProvider.incrementMovesCount();
 
@@ -70,7 +70,7 @@ class BoardUtils {
     cellsToFill
         .sort((a, b) => (pow(a[0], 2) + pow(a[1], 2)).compareTo(pow(b[0], 2) + pow(b[1], 2)));
 
-    const interval = const Duration(milliseconds: 10);
+    const interval = Duration(milliseconds: 10);
     int cellIndex = 0;
     myProvider.updateAnimationInProgress(true);
     Timer.periodic(
@@ -100,17 +100,22 @@ class BoardUtils {
     );
   }
 
-  static List getSiblingFillableCells(Data myProvider, row, col, siblingCells) {
-    List cells = myProvider.cells;
-    int boardSize = myProvider.boardSize;
+  static List<List<int>> getSiblingFillableCells(
+    Data myProvider,
+    int row,
+    int col,
+    List<List<int>> siblingCells,
+  ) {
+    final List<List<Cell>> cells = myProvider.cells;
+    final int boardSize = myProvider.boardSize;
 
-    int referenceValue = cells[row][col].value;
+    final int referenceValue = cells[row][col].value;
 
     for (var deltaRow = -1; deltaRow <= 1; deltaRow++) {
       for (var deltaCol = -1; deltaCol <= 1; deltaCol++) {
         if (deltaCol == 0 || deltaRow == 0) {
-          int candidateRow = row + deltaRow;
-          int candidateCol = col + deltaCol;
+          final int candidateRow = row + deltaRow;
+          final int candidateCol = col + deltaCol;
 
           if ((candidateRow >= 0 && candidateRow < boardSize) &&
               (candidateCol >= 0 && candidateCol < boardSize)) {
@@ -125,7 +130,11 @@ class BoardUtils {
               if (!alreadyFound) {
                 siblingCells.add([candidateRow, candidateCol]);
                 siblingCells = getSiblingFillableCells(
-                    myProvider, candidateRow, candidateCol, siblingCells);
+                  myProvider,
+                  candidateRow,
+                  candidateCol,
+                  siblingCells,
+                );
               }
             }
           }
@@ -137,8 +146,8 @@ class BoardUtils {
   }
 
   static bool checkBoardIsSolved(Data myProvider) {
-    List cells = myProvider.cells;
-    int boardSize = myProvider.boardSize;
+    final List<List<Cell>> cells = myProvider.cells;
+    final int boardSize = myProvider.boardSize;
 
     // check grid is fully completed and does not contain conflict
     int previousValue = cells[0][0].value;
diff --git a/lib/utils/game_utils.dart b/lib/utils/game_utils.dart
index f55b85217226913e1fe0d6a903d740b2bedcbbe8..56fee2a23b08b752982dcac398b607755fef9be9 100644
--- a/lib/utils/game_utils.dart
+++ b/lib/utils/game_utils.dart
@@ -8,9 +8,9 @@ class GameUtils {
 
   static Future<void> startGame(Data myProvider) async {
     print('Starting game');
-    print('- level: ' + myProvider.parameterLevel);
-    print('- size: ' + myProvider.boardSize.toString());
-    print('- colors: ' + myProvider.colorsCount.toString());
+    print('- level: ${myProvider.parameterLevel}');
+    print('- size: ${myProvider.boardSize}');
+    print('- colors: ${myProvider.colorsCount}');
 
     BoardUtils.createNewBoard(myProvider);
 
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 ebd96d9f0b4e970b4efd7d5fce80991ca25f499e..3baf5c044e7fb3617d4ecdfaa6ed0a3a8375f422 100644
--- a/pubspec.yaml
+++ b/pubspec.yaml
@@ -1,7 +1,7 @@
 name: colors
 description: colors application
 publish_to: 'none'
-version: 1.0.0+1
+version: 0.0.33+33
 
 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: