From 8f23c0a3548d0799185527a6965bc4c8b98c98b9 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Beno=C3=AEt=20Harrault?= <benoit@harrault.fr>
Date: Thu, 31 Oct 2024 17:09:11 +0100
Subject: [PATCH] Add Activity actions buttons

---
 CHANGELOG.md                                  |  4 +
 lib/flutter_toolbox.dart                      |  5 ++
 lib/settings/application_settings_form.dart   |  1 -
 .../application_settings_theme_card.dart      |  1 -
 .../button_delete_saved_activity.dart         | 24 ++++++
 .../activity/button_quit_activity.dart        | 25 +++++++
 .../button_resume_saved_activity.dart         | 24 ++++++
 .../activity/button_start_new_activity.dart   | 24 ++++++
 lib/widgets/styled_button.dart                | 75 ++++++++++++-------
 pubspec.yaml                                  |  2 +-
 10 files changed, 155 insertions(+), 30 deletions(-)
 create mode 100644 lib/widgets/activity/button_delete_saved_activity.dart
 create mode 100644 lib/widgets/activity/button_quit_activity.dart
 create mode 100644 lib/widgets/activity/button_resume_saved_activity.dart
 create mode 100644 lib/widgets/activity/button_start_new_activity.dart

diff --git a/CHANGELOG.md b/CHANGELOG.md
index f06cb06..671f865 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,7 @@
+## 0.4.0
+
+-   Add activity actions buttons
+
 ## 0.3.0
 
 -   Fix font assets path
diff --git a/lib/flutter_toolbox.dart b/lib/flutter_toolbox.dart
index 639b370..3b348c1 100644
--- a/lib/flutter_toolbox.dart
+++ b/lib/flutter_toolbox.dart
@@ -13,6 +13,11 @@ export 'widgets/show_error.dart' show ShowErrorWidget;
 export 'widgets/styled_button.dart' show StyledButton;
 export 'widgets/styled_container.dart' show StyledContainer;
 
+export 'widgets/activity/button_delete_saved_activity.dart' show ActivityButtonDeleteSaved;
+export 'widgets/activity/button_quit_activity.dart' show ActivityButtonQuit;
+export 'widgets/activity/button_resume_saved_activity.dart' show ActivityButtonResumeSaved;
+export 'widgets/activity/button_start_new_activity.dart' show ActivityButtonStartNew;
+
 export 'settings/application_settings_form.dart' show ApplicationSettingsForm;
 export 'settings/application_settings_theme_card.dart' show ApplicationSettingsThemeModeCard;
 export 'settings/application_theme_mode_cubit.dart'
diff --git a/lib/settings/application_settings_form.dart b/lib/settings/application_settings_form.dart
index 28a6b88..d1c01ae 100644
--- a/lib/settings/application_settings_form.dart
+++ b/lib/settings/application_settings_form.dart
@@ -1,7 +1,6 @@
 import 'package:flutter/material.dart';
 
 import 'package:flutter_custom_toolbox/flutter_toolbox.dart';
-import 'package:flutter_custom_toolbox/settings/application_settings_theme_card.dart';
 
 class ApplicationSettingsForm extends StatefulWidget {
   const ApplicationSettingsForm({super.key});
diff --git a/lib/settings/application_settings_theme_card.dart b/lib/settings/application_settings_theme_card.dart
index c501511..f834ee1 100644
--- a/lib/settings/application_settings_theme_card.dart
+++ b/lib/settings/application_settings_theme_card.dart
@@ -1,7 +1,6 @@
 import 'package:flutter/material.dart';
 
 import 'package:flutter_custom_toolbox/flutter_toolbox.dart';
-import 'package:flutter_custom_toolbox/settings/application_theme_mode_cubit.dart';
 
 class ApplicationSettingsThemeModeCard extends StatelessWidget {
   const ApplicationSettingsThemeModeCard({
diff --git a/lib/widgets/activity/button_delete_saved_activity.dart b/lib/widgets/activity/button_delete_saved_activity.dart
new file mode 100644
index 0000000..db7b4e7
--- /dev/null
+++ b/lib/widgets/activity/button_delete_saved_activity.dart
@@ -0,0 +1,24 @@
+import 'package:flutter/material.dart';
+
+import 'package:flutter_custom_toolbox/flutter_toolbox.dart';
+
+class ActivityButtonDeleteSaved extends StatelessWidget {
+  const ActivityButtonDeleteSaved({
+    super.key,
+    required this.onPressed,
+    this.onLongPress,
+  });
+
+  final VoidCallback? onPressed;
+  final VoidCallback? onLongPress;
+
+  @override
+  Widget build(BuildContext context) {
+    return StyledButton.icon(
+      color: Colors.grey,
+      onPressed: onPressed,
+      onLongPress: onLongPress,
+      icon: const Icon(UniconsLine.trash_alt),
+    );
+  }
+}
diff --git a/lib/widgets/activity/button_quit_activity.dart b/lib/widgets/activity/button_quit_activity.dart
new file mode 100644
index 0000000..d6cdec4
--- /dev/null
+++ b/lib/widgets/activity/button_quit_activity.dart
@@ -0,0 +1,25 @@
+import 'package:flutter/material.dart';
+
+import 'package:flutter_custom_toolbox/flutter_toolbox.dart';
+
+class ActivityButtonQuit extends StatelessWidget {
+  const ActivityButtonQuit({
+    super.key,
+    required this.onPressed,
+    this.onLongPress,
+  });
+
+  final VoidCallback? onPressed;
+  final VoidCallback? onLongPress;
+
+  @override
+  Widget build(BuildContext context) {
+    return StyledButton.icon(
+      color: Colors.red,
+      onPressed: onPressed,
+      onLongPress: onLongPress,
+      icon: const Icon(UniconsLine.play),
+      quarterTurns: 2,
+    );
+  }
+}
diff --git a/lib/widgets/activity/button_resume_saved_activity.dart b/lib/widgets/activity/button_resume_saved_activity.dart
new file mode 100644
index 0000000..0e3a26a
--- /dev/null
+++ b/lib/widgets/activity/button_resume_saved_activity.dart
@@ -0,0 +1,24 @@
+import 'package:flutter/material.dart';
+
+import 'package:flutter_custom_toolbox/flutter_toolbox.dart';
+
+class ActivityButtonResumeSaved extends StatelessWidget {
+  const ActivityButtonResumeSaved({
+    super.key,
+    required this.onPressed,
+    this.onLongPress,
+  });
+
+  final VoidCallback? onPressed;
+  final VoidCallback? onLongPress;
+
+  @override
+  Widget build(BuildContext context) {
+    return StyledButton.icon(
+      color: Colors.blue,
+      onPressed: onPressed,
+      onLongPress: onLongPress,
+      icon: const Icon(UniconsLine.skip_forward_alt),
+    );
+  }
+}
diff --git a/lib/widgets/activity/button_start_new_activity.dart b/lib/widgets/activity/button_start_new_activity.dart
new file mode 100644
index 0000000..d2c9120
--- /dev/null
+++ b/lib/widgets/activity/button_start_new_activity.dart
@@ -0,0 +1,24 @@
+import 'package:flutter/material.dart';
+
+import 'package:flutter_custom_toolbox/flutter_toolbox.dart';
+
+class ActivityButtonStartNew extends StatelessWidget {
+  const ActivityButtonStartNew({
+    super.key,
+    required this.onPressed,
+    this.onLongPress,
+  });
+
+  final VoidCallback? onPressed;
+  final VoidCallback? onLongPress;
+
+  @override
+  Widget build(BuildContext context) {
+    return StyledButton.icon(
+      color: Colors.blue,
+      onPressed: onPressed,
+      onLongPress: onLongPress,
+      icon: const Icon(UniconsLine.play),
+    );
+  }
+}
diff --git a/lib/widgets/styled_button.dart b/lib/widgets/styled_button.dart
index 5d50a01..2b07991 100644
--- a/lib/widgets/styled_button.dart
+++ b/lib/widgets/styled_button.dart
@@ -1,3 +1,5 @@
+import 'dart:math';
+
 import 'package:flutter/material.dart';
 
 import 'package:auto_size_text/auto_size_text.dart';
@@ -71,38 +73,57 @@ class StyledButton extends StatelessWidget {
     VoidCallback? onLongPress,
     required Icon icon,
     required Color color,
-    required double iconSize,
+    double? iconSize,
+    int quarterTurns = 0,
   }) {
+    final List<Shadow> shadows = [
+      Shadow(
+        blurRadius: 5.0,
+        color: color.lighten(60),
+        offset: const Offset(2, 2),
+      ),
+      Shadow(
+        blurRadius: 5.0,
+        color: color.lighten(60),
+        offset: const Offset(2, -2),
+      ),
+      Shadow(
+        blurRadius: 5.0,
+        color: color.lighten(60),
+        offset: const Offset(-2, 2),
+      ),
+      Shadow(
+        blurRadius: 5.0,
+        color: color.lighten(60),
+        offset: const Offset(-2, -2),
+      ),
+    ];
+
+    Widget child = iconSize != null
+        ? Icon(
+            icon.icon,
+            color: icon.color ?? color.darken(60),
+            size: iconSize,
+            shadows: shadows,
+          )
+        : LayoutBuilder(
+            builder: (context, constraint) {
+              return Icon(
+                icon.icon,
+                color: icon.color ?? color.darken(60),
+                size: min(constraint.biggest.height, constraint.biggest.width),
+                shadows: shadows,
+              );
+            },
+          );
+
     return StyledButton(
       color: color,
       onPressed: onPressed,
       onLongPress: onLongPress,
-      child: Icon(
-        icon.icon,
-        color: icon.color ?? color.darken(60),
-        size: iconSize,
-        shadows: [
-          Shadow(
-            blurRadius: 5.0,
-            color: color.lighten(60),
-            offset: const Offset(2, 2),
-          ),
-          Shadow(
-            blurRadius: 5.0,
-            color: color.lighten(60),
-            offset: const Offset(2, -2),
-          ),
-          Shadow(
-            blurRadius: 5.0,
-            color: color.lighten(60),
-            offset: const Offset(-2, 2),
-          ),
-          Shadow(
-            blurRadius: 5.0,
-            color: color.lighten(60),
-            offset: const Offset(-2, -2),
-          ),
-        ],
+      child: RotatedBox(
+        quarterTurns: quarterTurns,
+        child: child,
       ),
     );
   }
diff --git a/pubspec.yaml b/pubspec.yaml
index eaacdd8..1074c05 100644
--- a/pubspec.yaml
+++ b/pubspec.yaml
@@ -3,7 +3,7 @@ description: "Flutter custom toolbox for org.benoitharrault.* projects."
 
 publish_to: "none"
 
-version: 0.3.0
+version: 0.4.0
 
 homepage: https://git.harrault.fr/android/flutter-toolbox
 
-- 
GitLab