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