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 915bbb87ff685ec93e4c14831a36a6db0b94f5f8..aae6b26f13c5c1afcdea792265799e58911a7bf8 100644
--- a/android/app/build.gradle
+++ b/android/app/build.gradle
@@ -53,7 +53,7 @@ android {
 
     defaultConfig {
         applicationId "org.benoitharrault.memory"
-        minSdkVersion 16
+        minSdkVersion flutter.minSdkVersion
         targetSdkVersion 30
         versionCode appVersionCode.toInteger()
         versionName appVersionName
diff --git a/android/gradle.properties b/android/gradle.properties
index a91025357c94cf0966f1c7beed2d8bb52e1bfabb..a6742fa6ef44a10a2e9382d30dbde8e2665f2c91 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=1.0.16
-app.versionCode=17
+app.versionName=1.0.17
+app.versionCode=18
diff --git a/fastlane/metadata/android/en-US/changelogs/18.txt b/fastlane/metadata/android/en-US/changelogs/18.txt
new file mode 100644
index 0000000000000000000000000000000000000000..6ab11150150fc75a46c9acc317890208e5a120b9
--- /dev/null
+++ b/fastlane/metadata/android/en-US/changelogs/18.txt
@@ -0,0 +1 @@
+Add automatic flutter linter. Apply code lints. Update dependencies.
diff --git a/fastlane/metadata/android/fr-FR/changelogs/18.txt b/fastlane/metadata/android/fr-FR/changelogs/18.txt
new file mode 100644
index 0000000000000000000000000000000000000000..609f5cf6e95a8df0799865df2e1ebde8fa981e5a
--- /dev/null
+++ b/fastlane/metadata/android/fr-FR/changelogs/18.txt
@@ -0,0 +1 @@
+Ajout d'un correcteur automatique de code. Application des corrections. Mise à jour des dépendances.
diff --git a/lib/data/data.dart b/lib/data/data.dart
index a49b1ef9b36d4dd148f6edf74d7c16d9533bd61f..e193b610259ef772dfbc4f58ed7cdd02e9db6fff 100644
--- a/lib/data/data.dart
+++ b/lib/data/data.dart
@@ -1,4 +1,4 @@
-import 'package:memory/models/TileModel.dart';
+import 'package:memory/models/tile_model.dart';
 
 String selectedTile = "";
 int selectedIndex = 0;
@@ -20,56 +20,56 @@ List<bool> getClicked() {
 
 List<TileModel> getPairs() {
   List<TileModel> pairs = [];
-  TileModel tileModel = new TileModel();
+  TileModel tileModel = TileModel();
 
   //1
   tileModel.setImageAssetPath("assets/fox.png");
   tileModel.setIsSelected(false);
   pairs.add(tileModel);
   pairs.add(tileModel);
-  tileModel = new TileModel();
+  tileModel = TileModel();
 
   //2
   tileModel.setImageAssetPath("assets/hippo.png");
   tileModel.setIsSelected(false);
   pairs.add(tileModel);
   pairs.add(tileModel);
-  tileModel = new TileModel();
+  tileModel = TileModel();
 
   //3
   tileModel.setImageAssetPath("assets/horse.png");
   tileModel.setIsSelected(false);
   pairs.add(tileModel);
   pairs.add(tileModel);
-  tileModel = new TileModel();
+  tileModel = TileModel();
 
   //4
   tileModel.setImageAssetPath("assets/monkey.png");
   tileModel.setIsSelected(false);
   pairs.add(tileModel);
   pairs.add(tileModel);
-  tileModel = new TileModel();
+  tileModel = TileModel();
 
   //5
   tileModel.setImageAssetPath("assets/panda.png");
   tileModel.setIsSelected(false);
   pairs.add(tileModel);
   pairs.add(tileModel);
-  tileModel = new TileModel();
+  tileModel = TileModel();
 
   //6
   tileModel.setImageAssetPath("assets/parrot.png");
   tileModel.setIsSelected(false);
   pairs.add(tileModel);
   pairs.add(tileModel);
-  tileModel = new TileModel();
+  tileModel = TileModel();
 
   //7
   tileModel.setImageAssetPath("assets/rabbit.png");
   tileModel.setIsSelected(false);
   pairs.add(tileModel);
   pairs.add(tileModel);
-  tileModel = new TileModel();
+  tileModel = TileModel();
 
   //8
   tileModel.setImageAssetPath("assets/zoo.png");
@@ -82,56 +82,56 @@ List<TileModel> getPairs() {
 
 List<TileModel> getQuestionPairs() {
   List<TileModel> pairs = [];
-  TileModel tileModel = new TileModel();
+  TileModel tileModel = TileModel();
 
   //1
   tileModel.setImageAssetPath("assets/question.png");
   tileModel.setIsSelected(false);
   pairs.add(tileModel);
   pairs.add(tileModel);
-  tileModel = new TileModel();
+  tileModel = TileModel();
 
   //2
   tileModel.setImageAssetPath("assets/question.png");
   tileModel.setIsSelected(false);
   pairs.add(tileModel);
   pairs.add(tileModel);
-  tileModel = new TileModel();
+  tileModel = TileModel();
 
   //3
   tileModel.setImageAssetPath("assets/question.png");
   tileModel.setIsSelected(false);
   pairs.add(tileModel);
   pairs.add(tileModel);
-  tileModel = new TileModel();
+  tileModel = TileModel();
 
   //4
   tileModel.setImageAssetPath("assets/question.png");
   tileModel.setIsSelected(false);
   pairs.add(tileModel);
   pairs.add(tileModel);
-  tileModel = new TileModel();
+  tileModel = TileModel();
 
   //5
   tileModel.setImageAssetPath("assets/question.png");
   tileModel.setIsSelected(false);
   pairs.add(tileModel);
   pairs.add(tileModel);
-  tileModel = new TileModel();
+  tileModel = TileModel();
 
   //6
   tileModel.setImageAssetPath("assets/question.png");
   tileModel.setIsSelected(false);
   pairs.add(tileModel);
   pairs.add(tileModel);
-  tileModel = new TileModel();
+  tileModel = TileModel();
 
   //7
   tileModel.setImageAssetPath("assets/question.png");
   tileModel.setIsSelected(false);
   pairs.add(tileModel);
   pairs.add(tileModel);
-  tileModel = new TileModel();
+  tileModel = TileModel();
 
   //8
   tileModel.setImageAssetPath("assets/question.png");
diff --git a/lib/main.dart b/lib/main.dart
index 79bd62e202c22af9298826d18348b528fa85a6e9..6a22dde4cfde0ed9ad585fa78598b74d939e4da2 100644
--- a/lib/main.dart
+++ b/lib/main.dart
@@ -1,12 +1,15 @@
 import 'dart:async';
 
 import 'package:flutter/material.dart';
+
 import 'package:memory/data/data.dart';
-import 'package:memory/models/TileModel.dart';
+import 'package:memory/models/tile_model.dart';
 
-void main() => runApp(MyApp());
+void main() => runApp(const MyApp());
 
 class MyApp extends StatelessWidget {
+  const MyApp({super.key});
+
   @override
   Widget build(BuildContext context) {
     return MaterialApp(
@@ -15,17 +18,19 @@ class MyApp extends StatelessWidget {
       theme: ThemeData(
         primarySwatch: Colors.blue,
       ),
-      home: Home(),
+      home: const Home(),
     );
   }
 }
 
 class Home extends StatefulWidget {
+  const Home({super.key});
+
   @override
-  _HomeState createState() => _HomeState();
+  HomeState createState() => HomeState();
 }
 
-class _HomeState extends State<Home> {
+class HomeState extends State<Home> {
   List<TileModel> gridViewTiles = [];
   List<TileModel> questionPairs = [];
 
@@ -55,10 +60,10 @@ class _HomeState extends State<Home> {
       backgroundColor: Colors.white,
       body: SingleChildScrollView(
         child: Container(
-          padding: EdgeInsets.symmetric(horizontal: 20, vertical: 50),
+          padding: const EdgeInsets.symmetric(horizontal: 20, vertical: 50),
           child: Column(
             children: <Widget>[
-              SizedBox(
+              const SizedBox(
                 height: 40,
               ),
               points != 800
@@ -67,12 +72,12 @@ class _HomeState extends State<Home> {
                       children: <Widget>[
                         Text(
                           "$points/800",
-                          style: TextStyle(
+                          style: const TextStyle(
                             fontSize: 20,
                             fontWeight: FontWeight.w500,
                           ),
                         ),
-                        Text(
+                        const Text(
                           "Points",
                           textAlign: TextAlign.start,
                           style: TextStyle(
@@ -83,7 +88,7 @@ class _HomeState extends State<Home> {
                       ],
                     )
                   : Container(),
-              SizedBox(
+              const SizedBox(
                 height: 20,
               ),
               points != 800
@@ -91,7 +96,7 @@ class _HomeState extends State<Home> {
                       shrinkWrap: true,
                       //physics: ClampingScrollPhysics(),
                       scrollDirection: Axis.vertical,
-                      gridDelegate: SliverGridDelegateWithMaxCrossAxisExtent(
+                      gridDelegate: const SliverGridDelegateWithMaxCrossAxisExtent(
                         mainAxisSpacing: 0.0,
                         maxCrossAxisExtent: 100.0,
                       ),
@@ -103,36 +108,34 @@ class _HomeState extends State<Home> {
                         );
                       }),
                     )
-                  : Container(
-                      child: Column(
-                        children: <Widget>[
-                          GestureDetector(
-                            onTap: () {
-                              setState(() {
-                                points = 0;
-                                reStart();
-                              });
-                            },
-                            child: Container(
-                              height: 50,
-                              width: 200,
-                              alignment: Alignment.center,
-                              decoration: BoxDecoration(
-                                color: Colors.blue,
-                                borderRadius: BorderRadius.circular(24),
-                              ),
-                              child: Text(
-                                "Replay",
-                                style: TextStyle(
-                                  color: Colors.white,
-                                  fontSize: 17,
-                                  fontWeight: FontWeight.w500,
-                                ),
+                  : Column(
+                      children: <Widget>[
+                        GestureDetector(
+                          onTap: () {
+                            setState(() {
+                              points = 0;
+                              reStart();
+                            });
+                          },
+                          child: Container(
+                            height: 50,
+                            width: 200,
+                            alignment: Alignment.center,
+                            decoration: BoxDecoration(
+                              color: Colors.blue,
+                              borderRadius: BorderRadius.circular(24),
+                            ),
+                            child: const Text(
+                              "Replay",
+                              style: TextStyle(
+                                color: Colors.white,
+                                fontSize: 17,
+                                fontWeight: FontWeight.w500,
                               ),
                             ),
                           ),
-                        ],
-                      ),
+                        ),
+                      ],
                     ),
             ],
           ),
@@ -145,15 +148,15 @@ class _HomeState extends State<Home> {
 class Tile extends StatefulWidget {
   final String imagePathUrl;
   final int tileIndex;
-  final _HomeState? parent;
+  final HomeState? parent;
 
-  Tile({this.imagePathUrl = '', this.tileIndex = 0, this.parent});
+  const Tile({super.key, this.imagePathUrl = '', this.tileIndex = 0, this.parent});
 
   @override
-  _TileState createState() => _TileState();
+  TileState createState() => TileState();
 }
 
-class _TileState extends State<Tile> {
+class TileState extends State<Tile> {
   @override
   Widget build(BuildContext context) {
     return GestureDetector(
@@ -167,9 +170,9 @@ class _TileState extends State<Tile> {
             if (selectedTile == myPairs[widget.tileIndex].getImageAssetPath()) {
               print("add point");
               points = points + 100;
-              print(selectedTile + " -> " + widget.imagePathUrl);
+              print("$selectedTile -> ${widget.imagePathUrl}");
 
-              TileModel tileModel = new TileModel();
+              TileModel tileModel = TileModel();
               print(widget.tileIndex);
               selected = true;
               Future.delayed(const Duration(seconds: 2), () {
@@ -177,20 +180,20 @@ class _TileState extends State<Tile> {
                 myPairs[widget.tileIndex] = tileModel;
                 print(selectedIndex);
                 myPairs[selectedIndex] = tileModel;
-                this.widget.parent?.setState(() {});
+                widget.parent?.setState(() {});
                 setState(() {
                   selected = false;
                 });
                 selectedTile = "";
               });
             } else {
-              print(selectedTile + " -> " + myPairs[widget.tileIndex].getImageAssetPath());
+              print("$selectedTile -> ${myPairs[widget.tileIndex].getImageAssetPath()}");
               print("wrong choice");
               print(widget.tileIndex);
               print(selectedIndex);
               selected = true;
               Future.delayed(const Duration(seconds: 2), () {
-                this.widget.parent?.setState(() {
+                widget.parent?.setState(() {
                   myPairs[widget.tileIndex].setIsSelected(false);
                   myPairs[selectedIndex].setIsSelected(false);
                 });
@@ -213,7 +216,7 @@ class _TileState extends State<Tile> {
         }
       },
       child: Container(
-        margin: EdgeInsets.all(5),
+        margin: const EdgeInsets.all(5),
         child: myPairs[widget.tileIndex].getImageAssetPath() != ""
             ? Image.asset(myPairs[widget.tileIndex].getIsSelected()
                 ? myPairs[widget.tileIndex].getImageAssetPath()
diff --git a/lib/models/TileModel.dart b/lib/models/tile_model.dart
similarity index 82%
rename from lib/models/TileModel.dart
rename to lib/models/tile_model.dart
index 3df63271a8b738be9f9a04488082fa616b0090a2..aabe8613b76c2cabf46281bc85a47546c7939ce6 100644
--- a/lib/models/TileModel.dart
+++ b/lib/models/tile_model.dart
@@ -2,7 +2,10 @@ class TileModel {
   String imageAssetPath = "";
   bool isSelected = false;
 
-  TileModel({this.imageAssetPath = "", this.isSelected = false});
+  TileModel({
+    this.imageAssetPath = "",
+    this.isSelected = false,
+  });
 
   void setImageAssetPath(String getImageAssetPath) {
     imageAssetPath = getImageAssetPath;
diff --git a/pubspec.lock b/pubspec.lock
index af8a051b512b2eda811061c4e6eef883e5ece86b..ce8782705a3cbbacc84a2a4eb22cddd040573943 100644
--- a/pubspec.lock
+++ b/pubspec.lock
@@ -13,10 +13,10 @@ packages:
     dependency: transitive
     description:
       name: collection
-      sha256: f092b211a4319e98e5ff58223576de6c2803db36221657b46c82574721240687
+      sha256: ee67cb0715911d28db6bf4af1026078bd6f0128b07a5f66fb2ed94ec6783c09a
       url: "https://pub.dev"
     source: hosted
-    version: "1.17.2"
+    version: "1.18.0"
   cupertino_icons:
     dependency: "direct main"
     description:
@@ -30,22 +30,38 @@ packages:
     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"
+  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"
   sky_engine:
     dependency: transitive
     description: flutter
@@ -59,13 +75,5 @@ packages:
       url: "https://pub.dev"
     source: hosted
     version: "2.1.4"
-  web:
-    dependency: transitive
-    description:
-      name: web
-      sha256: dc8ccd225a2005c1be616fe02951e2e342092edf968cf0844220383757ef8f10
-      url: "https://pub.dev"
-    source: hosted
-    version: "0.1.4-beta"
 sdks:
-  dart: ">=3.1.0-185.0.dev <4.0.0"
+  dart: ">=3.2.0-0 <4.0.0"
diff --git a/pubspec.yaml b/pubspec.yaml
index fece5c820ea59058d00859257e2480f17e7bba38..4dc213ff4cb2689c39d61045f0f0e88e602a1c29 100644
--- a/pubspec.yaml
+++ b/pubspec.yaml
@@ -1,7 +1,7 @@
 name: memory
 description: A simple and classic memory game.
 publish_to: 'none'
-version: 1.0.0+1
+version: 1.0.17+18
 
 environment:
   sdk: '^3.0.0'
@@ -11,8 +11,10 @@ dependencies:
     sdk: flutter
   cupertino_icons: ^1.0.6
 
+dev_dependencies:
+  flutter_lints: ^3.0.1
+
 flutter:
   uses-material-design: true
   assets:
      - assets/
-