diff --git a/android/gradle.properties b/android/gradle.properties
index 6b2d4c01edce349df7a33f5e430d0beb8beccb32..ecbb5aaf4b02b5743761a174beafac22e93dcd0b 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 5fe5dd73df67df664784117e1456b7f7cc7131e7..1835d78d2b08a5c94ef2508bc515dc2ccb7d19cc 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 86cbe009ed797c5a66cc6a8ccef80f78da07f5db..e35635963d329dcb532751c722b280b7b73210c9 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 e099feb79495861816c21e844dcf01038b0c81d0..56cde71b0ab48c4dfd0fe6c7bbee10b842395852 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 41257e021d5ea50a6c9fd8fc4fd0da3e41bf2dbd..03e0611add32fe11850d28241f9220f738c706e5 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 aa759361eaf0b5dbdb2c770d83ef452fceb60340..92a90e027bb81abd4859ede8af3b7162a185a242 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 d6548b04414a5015d6946dae187bb9d56d697252..7530d1f66bca91d8c7e951e89d0e70e55f15613a 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 6a4c24732b65d5f42b863d0a7e9812cc4fabe588..e26f8a247061d3722439f8a0757d16801b4fd720 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 f354e213c268bd6dab8bbeb0bc8d99896bf6aa8c..3a092b3f77339f2d84930a605b50939ee5d43119 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 efece10a4435b499e8f9557a44161329b381fab2..1bcc14e0c051f3288a84bba8035fdd7a4eebda06 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 ebf663b54f928c580239afa3218833fb8f4a9a65..9914680b03f5689dc48c0ce08e00033062515b11 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 0000000000000000000000000000000000000000..fd48b2b009b80b22248d6e7f08a63e96c4065bd7
--- /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 bbeb8afac4b4f31dc3de84650799f129d50c8c6e..ab15162e3c4f564020ecf29b01ceff0b7140934d 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 2f14702d88a12f11b41c922969f2786ce6f8c25c..64096ba0c8ac127d7793e2ef04248b21e21a5a1a 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'