From 0b4008f83608c15db2a05aad40ae59c50b0d7f3b Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Beno=C3=AEt=20Harrault?= <benoit@harrault.fr>
Date: Tue, 27 Feb 2024 11:36:12 +0100
Subject: [PATCH] Avoid print calls in production code

---
 android/gradle.properties               |  4 ++--
 lib/cubit/api_cubit.dart                |  5 +++--
 lib/cubit/api_state.dart                |  7 ++-----
 lib/models/game/game.dart               |  5 +++--
 lib/models/game/game_board.dart         | 11 ++++++-----
 lib/network/api.dart                    |  9 +++++----
 lib/repository/api.dart                 |  9 +++++----
 lib/ui/screens/graph_page.dart          |  3 ++-
 lib/ui/widgets/game/game_board.dart     |  5 +++--
 lib/ui/widgets/take_picture_widget.dart |  9 +++++----
 lib/utils/picture_storage.dart          |  4 +++-
 lib/utils/tools.dart                    |  7 +++++++
 pubspec.lock                            |  8 ++++----
 pubspec.yaml                            |  2 +-
 14 files changed, 51 insertions(+), 37 deletions(-)
 create mode 100644 lib/utils/tools.dart

diff --git a/android/gradle.properties b/android/gradle.properties
index 6b2d4c0..ecbb5aa 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.48
-app.versionCode=49
+app.versionName=1.0.49
+app.versionCode=50
diff --git a/lib/cubit/api_cubit.dart b/lib/cubit/api_cubit.dart
index 5fe5dd7..1835d78 100644
--- a/lib/cubit/api_cubit.dart
+++ b/lib/cubit/api_cubit.dart
@@ -4,6 +4,7 @@ import 'package:hydrated_bloc/hydrated_bloc.dart';
 import 'package:random/models/api_failure.dart';
 import 'package:random/models/api_data.dart';
 import 'package:random/repository/api.dart';
+import 'package:random/utils/tools.dart';
 
 part 'api_state.dart';
 
@@ -27,7 +28,7 @@ class ApiDataCubit extends HydratedCubit<ApiDataState> {
         }
       }
     }
-    print('emit new state: $stateAsString');
+    printlog('emit new state: $stateAsString');
 
     emit(state);
   }
@@ -41,7 +42,7 @@ class ApiDataCubit extends HydratedCubit<ApiDataState> {
     } on ApiFailure catch (err) {
       customEmit(ApiDataFetchError(failure: err));
     } catch (err) {
-      print("Error (fetchApiData): $err");
+      printlog("Error (fetchApiData): $err");
     }
     return ApiData.fromJson({});
   }
diff --git a/lib/cubit/api_state.dart b/lib/cubit/api_state.dart
index 86cbe00..e356359 100644
--- a/lib/cubit/api_state.dart
+++ b/lib/cubit/api_state.dart
@@ -16,15 +16,12 @@ class ApiDataFetchInitial extends ApiDataState {}
 class ApiDataFetchLoading extends ApiDataState {}
 
 class ApiDataFetchLoaded extends ApiDataState {
-  @override
-  final ApiData data;
-
   const ApiDataFetchLoaded({
-    required this.data,
+    required super.data,
   });
 
   @override
-  List<Object> get props => [data];
+  List<Object> get props => [data!];
 }
 
 class ApiDataFetchError extends ApiDataState {
diff --git a/lib/models/game/game.dart b/lib/models/game/game.dart
index e099feb..56cde71 100644
--- a/lib/models/game/game.dart
+++ b/lib/models/game/game.dart
@@ -3,6 +3,7 @@ import 'dart:math';
 import 'package:random/models/game/game_board.dart';
 import 'package:random/models/game/game_cell.dart';
 import 'package:random/models/game/game_settings.dart';
+import 'package:random/utils/tools.dart';
 
 class Game {
   GameBoard board;
@@ -88,7 +89,7 @@ class Game {
 
   void dump() {
     GameBoard.printGrid(board.cells);
-    print(settings.toJson());
-    print(toJson());
+    printlog(settings.toString());
+    printlog(toString());
   }
 }
diff --git a/lib/models/game/game_board.dart b/lib/models/game/game_board.dart
index 41257e0..03e0611 100644
--- a/lib/models/game/game_board.dart
+++ b/lib/models/game/game_board.dart
@@ -2,6 +2,7 @@ import 'dart:math';
 
 import 'package:random/models/game/game_cell.dart';
 import 'package:random/models/game/game_settings.dart';
+import 'package:random/utils/tools.dart';
 
 class GameBoard {
   final List<List<GameCell>> cells;
@@ -36,17 +37,17 @@ class GameBoard {
   }
 
   static printGrid(List<List<GameCell>> cells) {
-    print('');
-    print('-------');
+    printlog('');
+    printlog('-------');
     for (var rowIndex = 0; rowIndex < cells.length; rowIndex++) {
       String row = '';
       for (var colIndex = 0; colIndex < cells[rowIndex].length; colIndex++) {
         row += cells[rowIndex][colIndex].value.toString();
       }
-      print(row);
+      printlog(row);
     }
-    print('-------');
-    print('');
+    printlog('-------');
+    printlog('');
   }
 
   @override
diff --git a/lib/network/api.dart b/lib/network/api.dart
index aa75936..92a90e0 100644
--- a/lib/network/api.dart
+++ b/lib/network/api.dart
@@ -3,6 +3,7 @@ import 'dart:io';
 import 'package:dio/dio.dart';
 
 import 'package:random/models/api_failure.dart';
+import 'package:random/utils/tools.dart';
 
 class ApiService {
   final Dio _dio = Dio();
@@ -12,15 +13,15 @@ class ApiService {
   Future<Response?> getData() async {
     String url = '$baseUrl/get.php';
     try {
-      print('fetching api data... $url');
+      printlog('fetching api data... $url');
       final Response response = await _dio.get(url);
-      print('ok got api response.');
-      print(response);
+      printlog('ok got api response.');
+      printlog(response.toString());
       return response;
     } on SocketException {
       throw const ApiFailure(message: 'Failed to reach API endpoint.');
     } catch (err) {
-      print("Error (getData): $err");
+      printlog("Error (getData): $err");
       throw ApiFailure(message: "$err");
     }
   }
diff --git a/lib/repository/api.dart b/lib/repository/api.dart
index d6548b0..7530d1f 100644
--- a/lib/repository/api.dart
+++ b/lib/repository/api.dart
@@ -1,5 +1,6 @@
 import 'package:random/models/api_data.dart';
 import 'package:random/network/api.dart';
+import 'package:random/utils/tools.dart';
 
 class ApiRepository {
   const ApiRepository({required this.apiService});
@@ -7,15 +8,15 @@ class ApiRepository {
   final ApiService apiService;
 
   Future<ApiData> getApiData() async {
-    print('(getApiData) delayed API call...');
+    printlog('(getApiData) delayed API call...');
     final response = await Future.delayed(const Duration(milliseconds: 1000))
         .then((value) => apiService.getData());
     if (response != null) {
-      print('(getApiData) got api response');
-      print(response.data);
+      printlog('(getApiData) got api response');
+      printlog(response.data);
       return ApiData.fromJson(response.data);
     }
-    print('(getApiData) failed');
+    printlog('(getApiData) failed');
     return ApiData.fromJson({});
   }
 }
diff --git a/lib/ui/screens/graph_page.dart b/lib/ui/screens/graph_page.dart
index 6a4c247..e26f8a2 100644
--- a/lib/ui/screens/graph_page.dart
+++ b/lib/ui/screens/graph_page.dart
@@ -1,6 +1,7 @@
 import 'package:flutter/material.dart';
 
 import 'package:random/ui/painters/graph_painter.dart';
+import 'package:random/utils/tools.dart';
 
 class GraphPage extends StatefulWidget {
   const GraphPage({super.key});
@@ -33,7 +34,7 @@ class _GraphPageState extends State<GraphPage> {
                     onTapUp: (details) {
                       double xTap = details.localPosition.dx;
                       double yTap = details.localPosition.dy;
-                      print('[$xTap,$yTap]');
+                      printlog('[$xTap,$yTap]');
                     },
                     child: Container(
                       margin: const EdgeInsets.all(4),
diff --git a/lib/ui/widgets/game/game_board.dart b/lib/ui/widgets/game/game_board.dart
index f354e21..3a092b3 100644
--- a/lib/ui/widgets/game/game_board.dart
+++ b/lib/ui/widgets/game/game_board.dart
@@ -6,6 +6,7 @@ import 'package:random/models/game/game.dart';
 import 'package:random/models/game/game_settings.dart';
 import 'package:random/ui/painters/cell_painter.dart';
 import 'package:random/ui/widgets/game/game_score.dart';
+import 'package:random/utils/tools.dart';
 
 class GameBoardWidget extends StatefulWidget {
   const GameBoardWidget({
@@ -168,11 +169,11 @@ class _GameBoardWidget extends State<GameBoardWidget> with TickerProviderStateMi
 
           int x = (xTap / widgetWidth * columnsCount).toInt();
           int y = (yTap / widgetHeight * rowsCount).toInt();
-          print('[$x,$y]');
+          printlog('[$x,$y]');
 
           removeCell(context, x, y);
         } else {
-          print('animation in progress...');
+          printlog('animation in progress...');
         }
       },
     );
diff --git a/lib/ui/widgets/take_picture_widget.dart b/lib/ui/widgets/take_picture_widget.dart
index efece10..1bcc14e 100644
--- a/lib/ui/widgets/take_picture_widget.dart
+++ b/lib/ui/widgets/take_picture_widget.dart
@@ -5,6 +5,7 @@ import 'package:flutter/material.dart';
 import 'package:unicons/unicons.dart';
 
 import 'package:random/utils/picture_storage.dart';
+import 'package:random/utils/tools.dart';
 
 class TakePictureWidget extends StatefulWidget {
   const TakePictureWidget({super.key});
@@ -41,7 +42,7 @@ class TakePictureWidgetState extends State<TakePictureWidget> {
       }
       setState(() {});
     });
-    }
+  }
 
   @override
   void dispose() {
@@ -71,14 +72,14 @@ class TakePictureWidgetState extends State<TakePictureWidget> {
               try {
                 if ((controller != null) && (controller!.value.isInitialized)) {
                   final XFile image = await controller!.takePicture();
-                  print('image.path: ${image.path}');
+                  printlog('image.path: ${image.path}');
                   debug.add('image.path: ${image.path}');
 
                   File savedFile = await storage!.writeCounter(File(image.path));
                   debug.add('image.path: ${image.path}');
 
                   String imagePath = savedFile.path;
-                  print('imagePath: $imagePath');
+                  printlog('imagePath: $imagePath');
                   debug.add('imagePath: $imagePath');
 
                   previousImages.add(imagePath);
@@ -88,7 +89,7 @@ class TakePictureWidgetState extends State<TakePictureWidget> {
                 debug.add('error: $e');
                 setState(() {});
 
-                print(e);
+                printlog(e.toString());
               }
             },
           ),
diff --git a/lib/utils/picture_storage.dart b/lib/utils/picture_storage.dart
index ebf663b..9914680 100644
--- a/lib/utils/picture_storage.dart
+++ b/lib/utils/picture_storage.dart
@@ -3,6 +3,8 @@ import 'dart:io';
 import 'package:path/path.dart';
 import 'package:path_provider/path_provider.dart';
 
+import 'package:random/utils/tools.dart';
+
 class PictureStorage {
   Future<String> get _localPath async {
     final directory = await getApplicationDocumentsDirectory();
@@ -20,7 +22,7 @@ class PictureStorage {
     try {
       return await sourceFile.rename(newPath);
     } on FileSystemException catch (e) {
-      print('Found exception while moving file: $e');
+      printlog('Found exception while moving file: $e');
       final newFile = await sourceFile.copy(newPath);
       await sourceFile.delete();
       return newFile;
diff --git a/lib/utils/tools.dart b/lib/utils/tools.dart
new file mode 100644
index 0000000..fd48b2b
--- /dev/null
+++ b/lib/utils/tools.dart
@@ -0,0 +1,7 @@
+import 'package:flutter/foundation.dart';
+
+void printlog(String message) {
+  if (!kReleaseMode) {
+    debugPrint(message);
+  }
+}
diff --git a/pubspec.lock b/pubspec.lock
index bbeb8af..ab15162 100644
--- a/pubspec.lock
+++ b/pubspec.lock
@@ -53,10 +53,10 @@ packages:
     dependency: transitive
     description:
       name: camera_platform_interface
-      sha256: fceb2c36038b6392317b1d5790c6ba9e6ca9f1da3031181b8bea03882bf9387a
+      sha256: a250314a48ea337b35909a4c9d5416a208d736dcb01d0b02c6af122be66660b0
       url: "https://pub.dev"
     source: hosted
-    version: "2.7.3"
+    version: "2.7.4"
   camera_web:
     dependency: transitive
     description:
@@ -364,10 +364,10 @@ packages:
     dependency: transitive
     description:
       name: provider
-      sha256: "9a96a0a19b594dbc5bf0f1f27d2bc67d5f95957359b461cd9feb44ed6ae75096"
+      sha256: c8a055ee5ce3fd98d6fc872478b03823ffdb448699c6ebdbbc71d59b596fd48c
       url: "https://pub.dev"
     source: hosted
-    version: "6.1.1"
+    version: "6.1.2"
   shared_preferences:
     dependency: transitive
     description:
diff --git a/pubspec.yaml b/pubspec.yaml
index 2f14702..64096ba 100644
--- a/pubspec.yaml
+++ b/pubspec.yaml
@@ -3,7 +3,7 @@ description: A random application, for testing purpose only.
 
 publish_to: 'none'
 
-version: 1.0.48+49
+version: 1.0.49+50
 
 environment:
   sdk: '^3.0.0'
-- 
GitLab