From 88fd92be794634fb02792f421432c1c99e1b8900 Mon Sep 17 00:00:00 2001 From: Yasien Mac Mini Date: Thu, 10 Apr 2025 08:09:42 +0200 Subject: [PATCH] xreate custome speed dial --- .../mih_package_components/mih_app.dart | 4 ++ .../mih_floating_menu.dart | 40 ++++++++++++++++++ .../test/package_test.dart | 42 +++++++++++++++++++ 3 files changed, 86 insertions(+) create mode 100644 Frontend/lib/mih_components/mih_package_components/mih_floating_menu.dart diff --git a/Frontend/lib/mih_components/mih_package_components/mih_app.dart b/Frontend/lib/mih_components/mih_package_components/mih_app.dart index 01cda197..6a557eea 100644 --- a/Frontend/lib/mih_components/mih_package_components/mih_app.dart +++ b/Frontend/lib/mih_components/mih_package_components/mih_app.dart @@ -1,3 +1,4 @@ +import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_floating_menu.dart'; import 'package:mzansi_innovation_hub/mih_packages/mih_home/components/mih_app_drawer.dart'; import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_app_tools.dart'; import 'package:flutter/material.dart'; @@ -9,6 +10,7 @@ class MihApp extends StatefulWidget { final MihAppTools appTools; final List appBody; final MIHAppDrawer? actionDrawer; + final MihFloatingMenu? appFloatingMenu; int selectedbodyIndex; final Function(int) onIndexChange; MihApp({ @@ -19,6 +21,7 @@ class MihApp extends StatefulWidget { this.actionDrawer, required this.selectedbodyIndex, required this.onIndexChange, + this.appFloatingMenu, }); @override @@ -63,6 +66,7 @@ class _MihAppState extends State { onTap: unfocusAll, child: Scaffold( drawer: widget.actionDrawer, + floatingActionButton: widget.appFloatingMenu, body: SafeArea( child: Container( width: screenSize.width, diff --git a/Frontend/lib/mih_components/mih_package_components/mih_floating_menu.dart b/Frontend/lib/mih_components/mih_package_components/mih_floating_menu.dart new file mode 100644 index 00000000..31eb3c1b --- /dev/null +++ b/Frontend/lib/mih_components/mih_package_components/mih_floating_menu.dart @@ -0,0 +1,40 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_speed_dial/flutter_speed_dial.dart'; +import 'package:mzansi_innovation_hub/main.dart'; + +class MihFloatingMenu extends StatefulWidget { + final List children; + const MihFloatingMenu({ + super.key, + required this.children, + }); + + @override + State createState() => _MihFloatingMenuState(); +} + +class _MihFloatingMenuState extends State { + @override + Widget build(BuildContext context) { + return Padding( + padding: const EdgeInsets.only( + right: 5.0, + bottom: 5.0, + ), + child: SpeedDial( + animatedIcon: AnimatedIcons.menu_close, + activeIcon: Icons.close, + backgroundColor: + MzanziInnovationHub.of(context)!.theme.secondaryColor(), + activeBackgroundColor: + MzanziInnovationHub.of(context)!.theme.errorColor(), + foregroundColor: MzanziInnovationHub.of(context)!.theme.primaryColor(), + overlayColor: Colors.black, + overlayOpacity: 0, + children: widget.children, + onOpen: () => debugPrint('OPENING DIAL'), + onClose: () => debugPrint('DIAL CLOSED'), + ), + ); + } +} diff --git a/Frontend/lib/mih_components/mih_package_components/test/package_test.dart b/Frontend/lib/mih_components/mih_package_components/test/package_test.dart index 4679bf8a..054332f6 100644 --- a/Frontend/lib/mih_components/mih_package_components/test/package_test.dart +++ b/Frontend/lib/mih_components/mih_package_components/test/package_test.dart @@ -1,3 +1,4 @@ +import 'package:flutter_speed_dial/flutter_speed_dial.dart'; import 'package:mzansi_innovation_hub/main.dart'; import 'package:mzansi_innovation_hub/mih_components/mih_layout/mih_single_child_scroll.dart'; import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_app.dart'; @@ -6,6 +7,7 @@ import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_ import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_app_tools.dart'; import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_app_window.dart'; import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih-app_tool_body.dart'; +import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_floating_menu.dart'; import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_icons.dart'; import 'package:mzansi_innovation_hub/mih_objects/arguments.dart'; import 'package:flutter/material.dart'; @@ -183,6 +185,24 @@ class _PackageTestState extends State { ), ), const SizedBox(height: 10), + MihFloatingMenu(children: [ + SpeedDialChild( + child: Icon( + Icons.add, + color: + MzanziInnovationHub.of(context)!.theme.primaryColor(), + ), + label: "Add", + labelBackgroundColor: + MzanziInnovationHub.of(context)!.theme.secondaryColor(), + labelStyle: TextStyle( + color: + MzanziInnovationHub.of(context)!.theme.primaryColor(), + ), + backgroundColor: + MzanziInnovationHub.of(context)!.theme.secondaryColor(), + ) + ]), Container( color: Colors.black, width: 200, @@ -231,6 +251,28 @@ class _PackageTestState extends State { appTools: getTools(), appBody: getToolBody(), selectedbodyIndex: _selcetedIndex, + appFloatingMenu: MihFloatingMenu( + children: [ + SpeedDialChild( + child: Icon( + Icons.add, + color: MzanziInnovationHub.of(context)!.theme.primaryColor(), + ), + label: "Add", + labelBackgroundColor: + MzanziInnovationHub.of(context)!.theme.secondaryColor(), + labelStyle: TextStyle( + fontWeight: FontWeight.bold, + color: MzanziInnovationHub.of(context)!.theme.primaryColor(), + ), + backgroundColor: + MzanziInnovationHub.of(context)!.theme.secondaryColor(), + onTap: () { + showFullScreenWindow(); + }, + ) + ], + ), onIndexChange: (newValue) { setState(() { _selcetedIndex = newValue;