Merge pull request #135 from yaso-meth/NEW--MIH-Floating-Menu

NEW--MIH-Floating-Menu
This commit is contained in:
yaso-meth
2025-04-11 11:01:48 +02:00
committed by GitHub
17 changed files with 1017 additions and 388 deletions

View File

@@ -0,0 +1,45 @@
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 IconData? icon;
final AnimatedIconData? animatedIcon;
final List<SpeedDialChild> children;
const MihFloatingMenu({
super.key,
this.icon,
this.animatedIcon,
required this.children,
});
@override
State<MihFloatingMenu> createState() => _MihFloatingMenuState();
}
class _MihFloatingMenuState extends State<MihFloatingMenu> {
@override
Widget build(BuildContext context) {
return Padding(
padding: const EdgeInsets.only(
right: 5.0,
bottom: 5.0,
),
child: SpeedDial(
icon: widget.icon,
animatedIcon: widget.animatedIcon,
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.5,
children: widget.children,
onOpen: () => debugPrint('OPENING DIAL'),
onClose: () => debugPrint('DIAL CLOSED'),
),
);
}
}

View File

@@ -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/main.dart';
import 'package:mzansi_innovation_hub/mih_components/mih_layout/mih_single_child_scroll.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'; 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_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_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-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_components/mih_package_components/mih_icons.dart';
import 'package:mzansi_innovation_hub/mih_objects/arguments.dart'; import 'package:mzansi_innovation_hub/mih_objects/arguments.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
@@ -183,6 +185,25 @@ class _PackageTestState extends State<PackageTest> {
), ),
), ),
const SizedBox(height: 10), 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(),
onTap: () {},
)
]),
Container( Container(
color: Colors.black, color: Colors.black,
width: 200, width: 200,

View File

@@ -0,0 +1,60 @@
import 'package:flutter/material.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_tool_body.dart';
import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_icons.dart';
class PackageToolOne extends StatefulWidget {
const PackageToolOne({super.key});
@override
State<PackageToolOne> createState() => _PackageToolOneState();
}
class _PackageToolOneState extends State<PackageToolOne> {
@override
Widget build(BuildContext context) {
return MihAppToolBody(
borderOn: true,
bodyItem: getBody(),
);
}
Widget getBody() {
return MihAppToolBody(
borderOn: true,
bodyItem: MihSingleChildScroll(
child: Column(
mainAxisAlignment: MainAxisAlignment.start,
mainAxisSize: MainAxisSize.max,
children: [
Text(
"Hello",
textAlign: TextAlign.center,
style: TextStyle(
fontSize: 25,
fontWeight: FontWeight.bold,
color: MzanziInnovationHub.of(context)!.theme.secondaryColor(),
),
),
const SizedBox(height: 10),
Container(
color: Colors.black,
width: 200,
height: 200,
padding: EdgeInsets.zero,
alignment: Alignment.center,
child: IconButton.filled(
onPressed: () {},
icon: Icon(
MihIcons.mihLogo,
color: MzanziInnovationHub.of(context)!.theme.primaryColor(),
),
),
)
],
),
),
);
}
}

View File

@@ -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/main.dart';
import 'package:mzansi_innovation_hub/mih_components/mih_inputs_and_buttons/mih_button.dart'; import 'package:mzansi_innovation_hub/mih_components/mih_inputs_and_buttons/mih_button.dart';
import 'package:mzansi_innovation_hub/mih_components/mih_layout/mih_single_child_scroll.dart'; import 'package:mzansi_innovation_hub/mih_components/mih_layout/mih_single_child_scroll.dart';
@@ -6,9 +7,11 @@ import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih-
import 'package:flutter/foundation.dart'; import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:font_awesome_flutter/font_awesome_flutter.dart'; import 'package:font_awesome_flutter/font_awesome_flutter.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_components/mih_package_components/mih_icons.dart';
import "package:universal_html/js.dart" as js; import "package:universal_html/js.dart" as js;
import 'package:url_launcher/url_launcher.dart'; import 'package:url_launcher/url_launcher.dart';
import 'package:share_plus/share_plus.dart';
class MihInfo extends StatefulWidget { class MihInfo extends StatefulWidget {
const MihInfo({super.key}); const MihInfo({super.key});
@@ -581,6 +584,13 @@ class _MihInfoState extends State<MihInfo> {
} }
} }
void shareMIHLink(BuildContext context, String message, String link) {
String shareText = "$message: $link";
Share.share(
shareText,
);
}
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return MihAppToolBody( return MihAppToolBody(
@@ -590,112 +600,196 @@ class _MihInfoState extends State<MihInfo> {
} }
Widget getBody() { Widget getBody() {
return MihSingleChildScroll( return Stack(
child: Column( children: [
children: [ MihSingleChildScroll(
SizedBox( child: Column(
width: 165, children: [
child: FittedBox( SizedBox(
child: Icon( width: 165,
MihIcons.mihLogo, child: FittedBox(
color: MzanziInnovationHub.of(context)!.theme.secondaryColor(), child: Icon(
MihIcons.mihLogo,
color:
MzanziInnovationHub.of(context)!.theme.secondaryColor(),
),
),
), ),
), const SizedBox(
), height: 10,
const SizedBox( ),
height: 10, const Text(
), "Mzansi Innovation Hub",
const Text( style: TextStyle(
"Mzansi Innovation Hub", fontWeight: FontWeight.bold,
style: TextStyle( fontSize: 30,
fontWeight: FontWeight.bold, ),
fontSize: 30, ),
), const Padding(
), padding: EdgeInsets.symmetric(vertical: 10.0),
const Padding( child: Divider(),
padding: EdgeInsets.symmetric(vertical: 10.0), ),
child: Divider(), // const SizedBox(
), // height: 10,
// const SizedBox( // ),
// height: 10, Wrap(
// ), alignment: WrapAlignment.start,
Wrap( crossAxisAlignment: WrapCrossAlignment.start,
alignment: WrapAlignment.start, spacing: 10,
crossAxisAlignment: WrapCrossAlignment.start, runSpacing: 10,
spacing: 10, children: [
runSpacing: 10, ourVision(),
children: [ ourMission(),
ourVision(), ],
ourMission(), ),
const SizedBox(
height: 10,
),
Wrap(
alignment: WrapAlignment.start,
crossAxisAlignment: WrapCrossAlignment.start,
spacing: 10,
runSpacing: 10,
children: [
SizedBox(
width: 300,
height: 50,
child: MIHButton(
onTap: () {
installMihTrigger();
},
buttonText: getInstallButtonText(),
buttonColor: MzanziInnovationHub.of(context)!
.theme
.secondaryColor(),
textColor: MzanziInnovationHub.of(context)!
.theme
.primaryColor(),
),
),
SizedBox(
width: 300,
height: 50,
child: MIHButton(
onTap: () {
launchSocialUrl(
Uri.parse(
"https://www.youtube.com/playlist?list=PLuT35kJIui0H5kXjxNOZlHoOPZbQLr4qh",
),
);
},
buttonText: "MIH Beginners Guide",
buttonColor: MzanziInnovationHub.of(context)!
.theme
.secondaryColor(),
textColor: MzanziInnovationHub.of(context)!
.theme
.primaryColor(),
),
),
]),
const SizedBox(
height: 10,
),
const Padding(
padding: EdgeInsets.symmetric(vertical: 10.0),
child: Divider(),
),
Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
mainAxisSize: MainAxisSize.max,
// spacing: 10,
// runSpacing: 10,
children: [
founderTitle(),
founderBio(),
],
),
const Padding(
padding: EdgeInsets.symmetric(vertical: 10.0),
child: Divider(),
),
mihSocials(),
], ],
), ),
const SizedBox( ),
height: 10, Positioned(
), right: 0,
Wrap( bottom: 0,
alignment: WrapAlignment.start, child: MihFloatingMenu(
crossAxisAlignment: WrapCrossAlignment.start, icon: Icons.share,
spacing: 10,
runSpacing: 10,
children: [
SizedBox(
width: 300,
height: 50,
child: MIHButton(
onTap: () {
installMihTrigger();
},
buttonText: getInstallButtonText(),
buttonColor:
MzanziInnovationHub.of(context)!.theme.secondaryColor(),
textColor:
MzanziInnovationHub.of(context)!.theme.primaryColor(),
),
),
SizedBox(
width: 300,
height: 50,
child: MIHButton(
onTap: () {
launchSocialUrl(
Uri.parse(
"https://www.youtube.com/playlist?list=PLuT35kJIui0H5kXjxNOZlHoOPZbQLr4qh",
),
);
},
buttonText: "MIH Beginners Guide",
buttonColor:
MzanziInnovationHub.of(context)!.theme.secondaryColor(),
textColor:
MzanziInnovationHub.of(context)!.theme.primaryColor(),
),
),
]),
const SizedBox(
height: 10,
),
const Padding(
padding: EdgeInsets.symmetric(vertical: 10.0),
child: Divider(),
),
Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
mainAxisSize: MainAxisSize.max,
// spacing: 10,
// runSpacing: 10,
children: [ children: [
founderTitle(), SpeedDialChild(
founderBio(), child: Icon(
Icons.vpn_lock,
color: MzanziInnovationHub.of(context)!.theme.primaryColor(),
),
label: "MIH - Web",
labelBackgroundColor:
MzanziInnovationHub.of(context)!.theme.successColor(),
labelStyle: TextStyle(
color: MzanziInnovationHub.of(context)!.theme.primaryColor(),
fontWeight: FontWeight.bold,
),
backgroundColor:
MzanziInnovationHub.of(context)!.theme.successColor(),
onTap: () {
shareMIHLink(
context,
"Check out the MIH app on the Web",
"https://app.mzansi-innovation-hub.co.za/",
);
},
),
SpeedDialChild(
child: Icon(
Icons.apple,
color: MzanziInnovationHub.of(context)!.theme.primaryColor(),
),
label: "MIH - iOS",
labelBackgroundColor:
MzanziInnovationHub.of(context)!.theme.successColor(),
labelStyle: TextStyle(
color: MzanziInnovationHub.of(context)!.theme.primaryColor(),
fontWeight: FontWeight.bold,
),
backgroundColor:
MzanziInnovationHub.of(context)!.theme.successColor(),
onTap: () {
shareMIHLink(
context,
"Check out the MIH app on the App Store",
"https://apps.apple.com/za/app/mzansi-innovation-hub/id6743310890",
);
},
),
SpeedDialChild(
child: Icon(
Icons.android,
color: MzanziInnovationHub.of(context)!.theme.primaryColor(),
),
label: "MIH - Android",
labelBackgroundColor:
MzanziInnovationHub.of(context)!.theme.successColor(),
labelStyle: TextStyle(
color: MzanziInnovationHub.of(context)!.theme.primaryColor(),
fontWeight: FontWeight.bold,
),
backgroundColor:
MzanziInnovationHub.of(context)!.theme.successColor(),
onTap: () {
shareMIHLink(
context,
"Check out the MIH app on the Play Store",
"https://play.google.com/store/apps/details?id=za.co.mzansiinnovationhub.mih",
);
},
),
], ],
), ),
const Padding( )
padding: EdgeInsets.symmetric(vertical: 10.0), ],
child: Divider(),
),
mihSocials(),
],
),
); );
} }
} }

View File

@@ -1,3 +1,4 @@
import 'package:flutter_speed_dial/flutter_speed_dial.dart';
import 'package:mzansi_innovation_hub/mih_apis/mih_mzansi_calendar_apis.dart'; import 'package:mzansi_innovation_hub/mih_apis/mih_mzansi_calendar_apis.dart';
import 'package:mzansi_innovation_hub/mih_components/mih_inputs_and_buttons/mih_button.dart'; import 'package:mzansi_innovation_hub/mih_components/mih_inputs_and_buttons/mih_button.dart';
import 'package:mzansi_innovation_hub/mih_components/mih_inputs_and_buttons/mih_date_input.dart'; import 'package:mzansi_innovation_hub/mih_components/mih_inputs_and_buttons/mih_date_input.dart';
@@ -7,6 +8,7 @@ import 'package:mzansi_innovation_hub/mih_components/mih_inputs_and_buttons/mih_
import 'package:mzansi_innovation_hub/mih_components/mih_layout/mih_single_child_scroll.dart'; import 'package:mzansi_innovation_hub/mih_components/mih_layout/mih_single_child_scroll.dart';
import 'package:mzansi_innovation_hub/mih_components/mih_layout/mih_window.dart'; import 'package:mzansi_innovation_hub/mih_components/mih_layout/mih_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-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_pop_up_messages/mih_error_message.dart'; import 'package:mzansi_innovation_hub/mih_components/mih_pop_up_messages/mih_error_message.dart';
import 'package:mzansi_innovation_hub/mih_objects/appointment.dart'; import 'package:mzansi_innovation_hub/mih_objects/appointment.dart';
import 'package:mzansi_innovation_hub/mih_objects/business.dart'; import 'package:mzansi_innovation_hub/mih_objects/business.dart';
@@ -300,24 +302,33 @@ class _PatientAccessRequestState extends State<Appointments> {
), ),
), ),
Positioned( Positioned(
right: 0, right: 0,
bottom: 0, bottom: 0,
child: Container( child: MihFloatingMenu(
decoration: BoxDecoration( icon: Icons.add,
borderRadius: BorderRadius.circular(50), animatedIcon: AnimatedIcons.menu_close,
color: MzanziInnovationHub.of(context)!.theme.secondaryColor(), children: [
), SpeedDialChild(
child: IconButton( child: Icon(
color: MzanziInnovationHub.of(context)!.theme.primaryColor(), Icons.add,
onPressed: () { color: MzanziInnovationHub.of(context)!.theme.primaryColor(),
),
label: "Add Card",
labelBackgroundColor:
MzanziInnovationHub.of(context)!.theme.successColor(),
labelStyle: TextStyle(
color: MzanziInnovationHub.of(context)!.theme.primaryColor(),
fontWeight: FontWeight.bold,
),
backgroundColor:
MzanziInnovationHub.of(context)!.theme.successColor(),
onTap: () {
addAppointmentWindow(); addAppointmentWindow();
}, },
icon: const Icon( )
Icons.add, ],
size: 50, ),
), ),
),
))
], ],
); );
} }

View File

@@ -128,27 +128,29 @@ class _MihPersonalHomeState extends State<MihPersonalHome> {
//=============== About MIH =============== //=============== About MIH ===============
temp.add({"About MIH": AboutMihTile(packageSize: packageSize)}); temp.add({"About MIH": AboutMihTile(packageSize: packageSize)});
//=============== Dev =============== //=============== Dev ===============
temp.add({ if (widget.isDevActive) {
"test": MihAppTile( temp.add({
onTap: () { "test": MihAppTile(
Navigator.of(context).pushNamed( onTap: () {
'/package-dev', Navigator.of(context).pushNamed(
//arguments: widget.signedInUser, '/package-dev',
); //arguments: widget.signedInUser,
}, );
appName: "Test", },
appIcon: Container( appName: "Test",
padding: const EdgeInsets.all(0.5), appIcon: Container(
child: Icon( padding: const EdgeInsets.all(0.5),
Icons.warning_amber_rounded, child: Icon(
color: MzanziInnovationHub.of(context)!.theme.primaryColor(), Icons.warning_amber_rounded,
color: MzanziInnovationHub.of(context)!.theme.primaryColor(),
),
), ),
), iconSize: packageSize,
iconSize: packageSize, primaryColor: MzanziInnovationHub.of(context)!.theme.secondaryColor(),
primaryColor: MzanziInnovationHub.of(context)!.theme.secondaryColor(), secondaryColor: MzanziInnovationHub.of(context)!.theme.primaryColor(),
secondaryColor: MzanziInnovationHub.of(context)!.theme.primaryColor(), )
) });
}); }
return temp; return temp;
} }

View File

@@ -1,11 +1,13 @@
import 'dart:async'; import 'dart:async';
import 'dart:convert'; import 'dart:convert';
import 'package:flutter_speed_dial/flutter_speed_dial.dart';
import 'package:mzansi_innovation_hub/main.dart'; import 'package:mzansi_innovation_hub/main.dart';
import 'package:mzansi_innovation_hub/mih_components/mih_inputs_and_buttons/mih_dropdown_input.dart'; import 'package:mzansi_innovation_hub/mih_components/mih_inputs_and_buttons/mih_dropdown_input.dart';
import 'package:mzansi_innovation_hub/mih_components/mih_inputs_and_buttons/mih_text_input.dart'; import 'package:mzansi_innovation_hub/mih_components/mih_inputs_and_buttons/mih_text_input.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-app_tool_body.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_window.dart';
import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_floating_menu.dart';
import 'package:mzansi_innovation_hub/mih_components/mih_pop_up_messages/mih_loading_circle.dart'; import 'package:mzansi_innovation_hub/mih_components/mih_pop_up_messages/mih_loading_circle.dart';
import 'package:mzansi_innovation_hub/mih_env/env.dart'; import 'package:mzansi_innovation_hub/mih_env/env.dart';
import 'package:mzansi_innovation_hub/mih_objects/app_user.dart'; import 'package:mzansi_innovation_hub/mih_objects/app_user.dart';
@@ -69,6 +71,7 @@ class _AiChatState extends State<AiChat> {
} }
void _handleSendPressed(types.PartialText message) { void _handleSendPressed(types.PartialText message) {
FocusScope.of(context).unfocus();
final textMessage = types.TextMessage( final textMessage = types.TextMessage(
author: _user, author: _user,
createdAt: DateTime.now().millisecondsSinceEpoch, createdAt: DateTime.now().millisecondsSinceEpoch,
@@ -349,7 +352,7 @@ class _AiChatState extends State<AiChat> {
return Visibility( return Visibility(
visible: value, visible: value,
child: Padding( child: Padding(
padding: const EdgeInsets.all(5.0), padding: const EdgeInsets.all(10.0),
child: Align( child: Align(
alignment: Alignment.centerLeft, alignment: Alignment.centerLeft,
child: FittedBox( child: FittedBox(
@@ -615,95 +618,169 @@ class _AiChatState extends State<AiChat> {
Widget build(BuildContext context) { Widget build(BuildContext context) {
return MihAppToolBody( return MihAppToolBody(
borderOn: false, borderOn: false,
bodyItem: Column( bodyItem: getBody(),
mainAxisAlignment: MainAxisAlignment.spaceEvenly, );
mainAxisSize: MainAxisSize.max, }
children: [
Row( Widget getBody() {
mainAxisAlignment: MainAxisAlignment.center, return Stack(
children: [
Column(
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
mainAxisSize: MainAxisSize.max,
children: [
Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
// Visibility(
// visible: _showModelOptions.value == true,
// child: IconButton.filled(
// iconSize: 20,
// onPressed: () {
// if (_showModelOptions.value == true) {
// setState(() {
// _showModelOptions.value = false;
// });
// } else {
// setState(() {
// _showModelOptions.value = true;
// });
// }
// },
// icon: const Icon(
// Icons.settings,
// ),
// ),
// ),
Expanded(
child: Text(
"Mzansi AI",
textAlign: TextAlign.center,
style: TextStyle(
fontSize: 25,
fontWeight: FontWeight.bold,
color: MzanziInnovationHub.of(context)!
.theme
.secondaryColor(),
),
),
),
// Expanded(
// child: Container(
// alignment: Alignment.centerRight,
// child: IconButton(
// onPressed: () {
// _resetChat();
// },
// icon: const Icon(Icons.refresh),
// ),
// ),
// ),
],
),
_getSettings(),
Expanded(
child: GestureDetector(
onTap: () {
if (_showModelOptions.value == true) {
setState(() {
_showModelOptions.value = false;
});
}
},
child: Chat(
messages: _messages,
// onAttachmentPressed: _handleAttachmentPressed,
// onMessageTap: _handleMessageTap,
// onPreviewDataFetched: _handlePreviewDataFetched,
onSendPressed: _handleSendPressed,
showUserAvatars: false,
showUserNames: false,
user: _user,
theme: getChatTheme(),
),
),
)
],
),
Positioned(
left: 0,
top: 0,
child: Visibility(
visible: _showModelOptions.value == true,
child: IconButton.filled(
iconSize: 20,
onPressed: () {
if (_showModelOptions.value == true) {
setState(() {
_showModelOptions.value = false;
});
} else {
setState(() {
_showModelOptions.value = true;
});
}
},
icon: const Icon(
Icons.settings,
),
),
),
),
Positioned(
right: 0,
bottom: 70,
child: MihFloatingMenu(
animatedIcon: AnimatedIcons.menu_close,
children: [ children: [
Expanded( SpeedDialChild(
child: Container( child: Icon(
alignment: Alignment.centerLeft, Icons.refresh,
child: Row( color: MzanziInnovationHub.of(context)!.theme.primaryColor(),
children: [
Visibility(
visible: _showModelOptions.value == false,
child: IconButton(
onPressed: () {
if (_showModelOptions.value == true) {
setState(() {
_showModelOptions.value = false;
});
} else {
setState(() {
_showModelOptions.value = true;
});
}
},
icon: const Icon(Icons.settings),
),
),
Visibility(
visible: _showModelOptions.value == true,
child: IconButton.filled(
onPressed: () {
if (_showModelOptions.value == true) {
setState(() {
_showModelOptions.value = false;
});
} else {
setState(() {
_showModelOptions.value = true;
});
}
},
icon: const Icon(Icons.settings),
),
),
],
),
), ),
), label: "New Chat",
Text( labelBackgroundColor:
"Mzansi AI", MzanziInnovationHub.of(context)!.theme.successColor(),
textAlign: TextAlign.center, labelStyle: TextStyle(
style: TextStyle( color: MzanziInnovationHub.of(context)!.theme.primaryColor(),
fontSize: 25,
fontWeight: FontWeight.bold, fontWeight: FontWeight.bold,
color:
MzanziInnovationHub.of(context)!.theme.secondaryColor(),
), ),
backgroundColor:
MzanziInnovationHub.of(context)!.theme.successColor(),
onTap: () {
_resetChat();
},
), ),
Expanded( SpeedDialChild(
child: Container( child: Icon(
alignment: Alignment.centerRight, Icons.settings,
child: IconButton( color: MzanziInnovationHub.of(context)!.theme.primaryColor(),
onPressed: () {
_resetChat();
},
icon: const Icon(Icons.refresh),
),
), ),
label: "Settings",
labelBackgroundColor:
MzanziInnovationHub.of(context)!.theme.successColor(),
labelStyle: TextStyle(
color: MzanziInnovationHub.of(context)!.theme.primaryColor(),
fontWeight: FontWeight.bold,
),
backgroundColor:
MzanziInnovationHub.of(context)!.theme.successColor(),
onTap: () {
if (_showModelOptions.value == true) {
setState(() {
_showModelOptions.value = false;
});
} else {
setState(() {
_showModelOptions.value = true;
});
}
},
), ),
], ],
), ),
_getSettings(), ),
Expanded( ],
child: Chat(
messages: _messages,
// onAttachmentPressed: _handleAttachmentPressed,
// onMessageTap: _handleMessageTap,
// onPreviewDataFetched: _handlePreviewDataFetched,
onSendPressed: _handleSendPressed,
showUserAvatars: false,
showUserNames: false,
user: _user,
theme: getChatTheme(),
),
)
],
),
); );
} }
} }

View File

@@ -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/main.dart';
import 'package:mzansi_innovation_hub/mih_apis/mih_mzansi_wallet_apis.dart'; import 'package:mzansi_innovation_hub/mih_apis/mih_mzansi_wallet_apis.dart';
import 'package:mzansi_innovation_hub/mih_components/mih_inputs_and_buttons/mih_button.dart'; import 'package:mzansi_innovation_hub/mih_components/mih_inputs_and_buttons/mih_button.dart';
@@ -7,6 +8,7 @@ import 'package:mzansi_innovation_hub/mih_components/mih_inputs_and_buttons/mih_
import 'package:mzansi_innovation_hub/mih_components/mih_layout/mih_single_child_scroll.dart'; import 'package:mzansi_innovation_hub/mih_components/mih_layout/mih_single_child_scroll.dart';
import 'package:mzansi_innovation_hub/mih_components/mih_layout/mih_window.dart'; import 'package:mzansi_innovation_hub/mih_components/mih_layout/mih_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-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_pop_up_messages/mih_error_message.dart'; import 'package:mzansi_innovation_hub/mih_components/mih_pop_up_messages/mih_error_message.dart';
import 'package:mzansi_innovation_hub/mih_components/mih_pop_up_messages/mih_loading_circle.dart'; import 'package:mzansi_innovation_hub/mih_components/mih_pop_up_messages/mih_loading_circle.dart';
import 'package:mzansi_innovation_hub/mih_objects/app_user.dart'; import 'package:mzansi_innovation_hub/mih_objects/app_user.dart';
@@ -316,24 +318,33 @@ class _MihCardsState extends State<MihCards> {
), ),
), ),
Positioned( Positioned(
right: 0, right: 0,
bottom: 0, bottom: 0,
child: Container( child: MihFloatingMenu(
decoration: BoxDecoration( animatedIcon: AnimatedIcons.menu_close,
borderRadius: BorderRadius.circular(50), children: [
color: MzanziInnovationHub.of(context)!.theme.secondaryColor(), SpeedDialChild(
), child: Icon(
child: IconButton( Icons.add,
color: MzanziInnovationHub.of(context)!.theme.primaryColor(), color:
onPressed: () { MzanziInnovationHub.of(context)!.theme.primaryColor(),
addCardWindow(context); ),
}, label: "Add Card",
icon: const Icon( labelBackgroundColor:
Icons.add_card, MzanziInnovationHub.of(context)!.theme.successColor(),
size: 50, labelStyle: TextStyle(
), color:
), MzanziInnovationHub.of(context)!.theme.primaryColor(),
)) fontWeight: FontWeight.bold,
),
backgroundColor:
MzanziInnovationHub.of(context)!.theme.successColor(),
onTap: () {
addCardWindow(context);
},
)
]),
)
], ],
); );
} }

View File

@@ -1,6 +1,8 @@
import 'package:flutter_speed_dial/flutter_speed_dial.dart';
import 'package:mzansi_innovation_hub/main.dart'; import 'package:mzansi_innovation_hub/main.dart';
import 'package:mzansi_innovation_hub/mih_apis/mih_claim_statement_generation_api.dart'; import 'package:mzansi_innovation_hub/mih_apis/mih_claim_statement_generation_api.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-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_pop_up_messages/mih_loading_circle.dart'; import 'package:mzansi_innovation_hub/mih_components/mih_pop_up_messages/mih_loading_circle.dart';
import 'package:mzansi_innovation_hub/mih_objects/app_user.dart'; import 'package:mzansi_innovation_hub/mih_objects/app_user.dart';
import 'package:mzansi_innovation_hub/mih_objects/business.dart'; import 'package:mzansi_innovation_hub/mih_objects/business.dart';
@@ -110,42 +112,92 @@ class _PatientClaimOrStatementState extends State<PatientClaimOrStatement> {
} }
Widget getBody() { Widget getBody() {
return FutureBuilder( return Stack(
future: futueFiles, children: [
builder: (context, snapshot) { FutureBuilder(
if (snapshot.connectionState == ConnectionState.waiting) { future: futueFiles,
return const Center( builder: (context, snapshot) {
child: Mihloadingcircle(), if (snapshot.connectionState == ConnectionState.waiting) {
); return const Center(
} else if (snapshot.hasData) { child: Mihloadingcircle(),
final filesList = snapshot.data!; );
return Column( } else if (snapshot.hasData) {
children: [ final filesList = snapshot.data!;
Row( return Column(
mainAxisAlignment: MainAxisAlignment.center, children: [
children: setIcons(), Row(
), mainAxisAlignment: MainAxisAlignment.center,
Divider( children: [
color: Text(
MzanziInnovationHub.of(context)!.theme.secondaryColor()), "Claims/ Statements",
const SizedBox(height: 10), textAlign: TextAlign.center,
//const Placeholder(), style: TextStyle(
BuildClaimStatementFileList( fontSize: 25,
files: filesList, fontWeight: FontWeight.bold,
signedInUser: widget.signedInUser, color: MzanziInnovationHub.of(context)!
selectedPatient: widget.selectedPatient, .theme
business: widget.business, .secondaryColor(),
businessUser: widget.businessUser, ),
type: widget.type, ),
), ],
], ),
); Divider(
} else { color: MzanziInnovationHub.of(context)!
return const Center( .theme
child: Text("Error Loading Notes"), .secondaryColor()),
); const SizedBox(height: 10),
} //const Placeholder(),
}, BuildClaimStatementFileList(
files: filesList,
signedInUser: widget.signedInUser,
selectedPatient: widget.selectedPatient,
business: widget.business,
businessUser: widget.businessUser,
type: widget.type,
),
],
);
} else {
return const Center(
child: Text("Error Loading Notes"),
);
}
},
),
Visibility(
visible: widget.type != "personal",
child: Positioned(
right: 0,
bottom: 0,
child: MihFloatingMenu(
icon: Icons.file_copy,
animatedIcon: AnimatedIcons.menu_close,
children: [
SpeedDialChild(
child: Icon(
Icons.add,
color:
MzanziInnovationHub.of(context)!.theme.primaryColor(),
),
label: "Generate Claim/ Statement",
labelBackgroundColor:
MzanziInnovationHub.of(context)!.theme.successColor(),
labelStyle: TextStyle(
color:
MzanziInnovationHub.of(context)!.theme.primaryColor(),
fontWeight: FontWeight.bold,
),
backgroundColor:
MzanziInnovationHub.of(context)!.theme.successColor(),
onTap: () {
claimOrStatementWindow();
},
)
],
),
),
),
],
); );
} }
} }

View File

@@ -1,4 +1,5 @@
import 'dart:convert'; import 'dart:convert';
import 'package:flutter_speed_dial/flutter_speed_dial.dart';
import 'package:mzansi_innovation_hub/main.dart'; import 'package:mzansi_innovation_hub/main.dart';
import 'package:mzansi_innovation_hub/mih_components/mih_inputs_and_buttons/mih_button.dart'; import 'package:mzansi_innovation_hub/mih_components/mih_inputs_and_buttons/mih_button.dart';
import 'package:mzansi_innovation_hub/mih_components/mih_inputs_and_buttons/mih_multiline_text_input.dart'; import 'package:mzansi_innovation_hub/mih_components/mih_inputs_and_buttons/mih_multiline_text_input.dart';
@@ -6,6 +7,7 @@ import 'package:mzansi_innovation_hub/mih_components/mih_inputs_and_buttons/mih_
import 'package:mzansi_innovation_hub/mih_components/mih_layout/mih_single_child_scroll.dart'; import 'package:mzansi_innovation_hub/mih_components/mih_layout/mih_single_child_scroll.dart';
import 'package:mzansi_innovation_hub/mih_components/mih_layout/mih_window.dart'; import 'package:mzansi_innovation_hub/mih_components/mih_layout/mih_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-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_pop_up_messages/mih_error_message.dart'; import 'package:mzansi_innovation_hub/mih_components/mih_pop_up_messages/mih_error_message.dart';
import 'package:mzansi_innovation_hub/mih_components/mih_pop_up_messages/mih_loading_circle.dart'; import 'package:mzansi_innovation_hub/mih_components/mih_pop_up_messages/mih_loading_circle.dart';
import 'package:mzansi_innovation_hub/mih_components/mih_pop_up_messages/mih_success_message.dart'; import 'package:mzansi_innovation_hub/mih_components/mih_pop_up_messages/mih_success_message.dart';
@@ -321,41 +323,88 @@ class _PatientConsultationState extends State<PatientConsultation> {
} }
Widget getBody() { Widget getBody() {
return MihSingleChildScroll( return Stack(
child: FutureBuilder( children: [
future: futueNotes, MihSingleChildScroll(
builder: (context, snapshot) { child: FutureBuilder(
if (snapshot.connectionState == ConnectionState.waiting) { future: futueNotes,
return const Center( builder: (context, snapshot) {
child: Mihloadingcircle(), if (snapshot.connectionState == ConnectionState.waiting) {
); return const Center(
} else if (snapshot.hasData) { child: Mihloadingcircle(),
final notesList = snapshot.data!; );
return Column(children: [ } else if (snapshot.hasData) {
Row( final notesList = snapshot.data!;
mainAxisAlignment: MainAxisAlignment.center, return Column(children: [
children: setIcons(), Row(
), mainAxisAlignment: MainAxisAlignment.center,
Divider( children: [
color: Text(
MzanziInnovationHub.of(context)!.theme.secondaryColor()), "Consultation Notes",
const SizedBox(height: 10), textAlign: TextAlign.center,
BuildNotesList( style: TextStyle(
notes: notesList, fontSize: 25,
signedInUser: widget.signedInUser, fontWeight: FontWeight.bold,
selectedPatient: widget.selectedPatient, color: MzanziInnovationHub.of(context)!
business: widget.business, .theme
businessUser: widget.businessUser, .secondaryColor()),
type: widget.type, ),
), ],
]); ),
} else { Divider(
return const Center( color: MzanziInnovationHub.of(context)!
child: Text("Error Loading Notes"), .theme
); .secondaryColor()),
} const SizedBox(height: 10),
}, BuildNotesList(
), notes: notesList,
signedInUser: widget.signedInUser,
selectedPatient: widget.selectedPatient,
business: widget.business,
businessUser: widget.businessUser,
type: widget.type,
),
]);
} else {
return const Center(
child: Text("Error Loading Notes"),
);
}
},
),
),
Visibility(
visible: widget.type != "personal",
child: Positioned(
right: 0,
bottom: 0,
child: MihFloatingMenu(
icon: Icons.add,
animatedIcon: AnimatedIcons.menu_close,
children: [
SpeedDialChild(
child: Icon(
Icons.add,
color:
MzanziInnovationHub.of(context)!.theme.primaryColor(),
),
label: "Add Note",
labelBackgroundColor:
MzanziInnovationHub.of(context)!.theme.successColor(),
labelStyle: TextStyle(
color:
MzanziInnovationHub.of(context)!.theme.primaryColor(),
fontWeight: FontWeight.bold,
),
backgroundColor:
MzanziInnovationHub.of(context)!.theme.successColor(),
onTap: () {},
)
],
),
),
),
],
); );
} }
} }

View File

@@ -1,5 +1,6 @@
import 'dart:convert'; import 'dart:convert';
import 'package:flutter_speed_dial/flutter_speed_dial.dart';
import 'package:mzansi_innovation_hub/main.dart'; import 'package:mzansi_innovation_hub/main.dart';
import 'package:mzansi_innovation_hub/mih_components/med_cert_input.dart'; import 'package:mzansi_innovation_hub/mih_components/med_cert_input.dart';
import 'package:mzansi_innovation_hub/mih_components/mih_inputs_and_buttons/mih_button.dart'; import 'package:mzansi_innovation_hub/mih_components/mih_inputs_and_buttons/mih_button.dart';
@@ -7,6 +8,7 @@ import 'package:mzansi_innovation_hub/mih_components/mih_inputs_and_buttons/mih_
import 'package:mzansi_innovation_hub/mih_components/mih_layout/mih_single_child_scroll.dart'; import 'package:mzansi_innovation_hub/mih_components/mih_layout/mih_single_child_scroll.dart';
import 'package:mzansi_innovation_hub/mih_components/mih_layout/mih_window.dart'; import 'package:mzansi_innovation_hub/mih_components/mih_layout/mih_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-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_pop_up_messages/mih_error_message.dart'; import 'package:mzansi_innovation_hub/mih_components/mih_pop_up_messages/mih_error_message.dart';
import 'package:mzansi_innovation_hub/mih_components/mih_pop_up_messages/mih_loading_circle.dart'; import 'package:mzansi_innovation_hub/mih_components/mih_pop_up_messages/mih_loading_circle.dart';
import 'package:mzansi_innovation_hub/mih_components/mih_pop_up_messages/mih_success_message.dart'; import 'package:mzansi_innovation_hub/mih_components/mih_pop_up_messages/mih_success_message.dart';
@@ -372,6 +374,104 @@ class _PatientDocumentsState extends State<PatientDocuments> {
} }
} }
Widget getMenu() {
if (widget.type == "personal") {
return Positioned(
right: 0,
bottom: 0,
child: MihFloatingMenu(
icon: Icons.add,
animatedIcon: AnimatedIcons.menu_close,
children: [
SpeedDialChild(
child: Icon(
Icons.attach_file,
color: MzanziInnovationHub.of(context)!.theme.primaryColor(),
),
label: "Attach Document",
labelBackgroundColor:
MzanziInnovationHub.of(context)!.theme.successColor(),
labelStyle: TextStyle(
color: MzanziInnovationHub.of(context)!.theme.primaryColor(),
fontWeight: FontWeight.bold,
),
backgroundColor:
MzanziInnovationHub.of(context)!.theme.successColor(),
onTap: () {
uploudFilePopUp();
},
)
],
),
);
} else {
return Positioned(
right: 0,
bottom: 0,
child: MihFloatingMenu(
icon: Icons.add,
animatedIcon: AnimatedIcons.menu_close,
children: [
SpeedDialChild(
child: Icon(
Icons.attach_file,
color: MzanziInnovationHub.of(context)!.theme.primaryColor(),
),
label: "Add Document",
labelBackgroundColor:
MzanziInnovationHub.of(context)!.theme.successColor(),
labelStyle: TextStyle(
color: MzanziInnovationHub.of(context)!.theme.primaryColor(),
fontWeight: FontWeight.bold,
),
backgroundColor:
MzanziInnovationHub.of(context)!.theme.successColor(),
onTap: () {
uploudFilePopUp();
},
),
SpeedDialChild(
child: Icon(
Icons.sick_outlined,
color: MzanziInnovationHub.of(context)!.theme.primaryColor(),
),
label: "Generate Medical Certificate",
labelBackgroundColor:
MzanziInnovationHub.of(context)!.theme.successColor(),
labelStyle: TextStyle(
color: MzanziInnovationHub.of(context)!.theme.primaryColor(),
fontWeight: FontWeight.bold,
),
backgroundColor:
MzanziInnovationHub.of(context)!.theme.successColor(),
onTap: () {
medCertPopUp();
},
),
SpeedDialChild(
child: Icon(
Icons.medication,
color: MzanziInnovationHub.of(context)!.theme.primaryColor(),
),
label: "Generate Prescription",
labelBackgroundColor:
MzanziInnovationHub.of(context)!.theme.successColor(),
labelStyle: TextStyle(
color: MzanziInnovationHub.of(context)!.theme.primaryColor(),
fontWeight: FontWeight.bold,
),
backgroundColor:
MzanziInnovationHub.of(context)!.theme.successColor(),
onTap: () {
prescritionPopUp();
},
),
],
),
);
}
}
List<Widget> setIcons() { List<Widget> setIcons() {
if (widget.type == "personal") { if (widget.type == "personal") {
return [ return [
@@ -488,41 +588,59 @@ class _PatientDocumentsState extends State<PatientDocuments> {
} }
Widget getBody() { Widget getBody() {
return MihSingleChildScroll( return Stack(
child: FutureBuilder( children: [
future: futueFiles, MihSingleChildScroll(
builder: (context, snapshot) { child: FutureBuilder(
if (snapshot.connectionState == ConnectionState.waiting) { future: futueFiles,
return const Center( builder: (context, snapshot) {
child: Mihloadingcircle(), if (snapshot.connectionState == ConnectionState.waiting) {
); return const Center(
} else if (snapshot.hasData) { child: Mihloadingcircle(),
final filesList = snapshot.data!; );
return Column(children: [ } else if (snapshot.hasData) {
Row( final filesList = snapshot.data!;
mainAxisAlignment: MainAxisAlignment.center, return Column(children: [
children: setIcons(), Row(
), mainAxisAlignment: MainAxisAlignment.center,
Divider( children: [
color: Text(
MzanziInnovationHub.of(context)!.theme.secondaryColor()), "Documents",
const SizedBox(height: 10), textAlign: TextAlign.center,
BuildFilesList( style: TextStyle(
files: filesList, fontSize: 25,
signedInUser: widget.signedInUser, fontWeight: FontWeight.bold,
selectedPatient: widget.selectedPatient, color: MzanziInnovationHub.of(context)!
business: widget.business, .theme
businessUser: widget.businessUser, .secondaryColor(),
type: widget.type, ),
), ),
]); ],
} else { ),
return const Center( Divider(
child: Text("Error Loading Notes"), color: MzanziInnovationHub.of(context)!
); .theme
} .secondaryColor()),
}, const SizedBox(height: 10),
), BuildFilesList(
files: filesList,
signedInUser: widget.signedInUser,
selectedPatient: widget.selectedPatient,
business: widget.business,
businessUser: widget.businessUser,
type: widget.type,
),
]);
} else {
return const Center(
child: Text("Error Loading Notes"),
);
}
},
),
),
getMenu(),
],
); );
} }
} }

View File

@@ -1,7 +1,9 @@
import 'package:flutter_speed_dial/flutter_speed_dial.dart';
import 'package:mzansi_innovation_hub/main.dart'; import 'package:mzansi_innovation_hub/main.dart';
import 'package:mzansi_innovation_hub/mih_components/mih_inputs_and_buttons/mih_text_input.dart'; import 'package:mzansi_innovation_hub/mih_components/mih_inputs_and_buttons/mih_text_input.dart';
import 'package:mzansi_innovation_hub/mih_components/mih_layout/mih_single_child_scroll.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_tool_body.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_objects/app_user.dart'; import 'package:mzansi_innovation_hub/mih_objects/app_user.dart';
import 'package:mzansi_innovation_hub/mih_objects/arguments.dart'; import 'package:mzansi_innovation_hub/mih_objects/arguments.dart';
import 'package:mzansi_innovation_hub/mih_objects/patients.dart'; import 'package:mzansi_innovation_hub/mih_objects/patients.dart';
@@ -237,58 +239,87 @@ class _PatientInfoState extends State<PatientInfo> {
} }
Widget getBody() { Widget getBody() {
return MihSingleChildScroll( return Stack(
child: Column( children: [
children: [ MihSingleChildScroll(
Row( child: Column(
mainAxisAlignment: MainAxisAlignment.center, children: [
//crossAxisAlignment: , Row(
children: [ mainAxisAlignment: MainAxisAlignment.center,
Text( //crossAxisAlignment: ,
"Personal Details", children: [
textAlign: TextAlign.center, Text(
style: TextStyle( "Personal Details",
fontSize: 25, textAlign: TextAlign.center,
fontWeight: FontWeight.bold, style: TextStyle(
color: fontSize: 25,
MzanziInnovationHub.of(context)!.theme.secondaryColor(), fontWeight: FontWeight.bold,
), color: MzanziInnovationHub.of(context)!
.theme
.secondaryColor(),
),
),
]),
Divider(
color:
MzanziInnovationHub.of(context)!.theme.secondaryColor()),
const SizedBox(height: 10),
getPatientDetailsField(),
const SizedBox(height: 10),
Text(
"Medical Aid Details",
textAlign: TextAlign.center,
style: TextStyle(
fontSize: 25,
fontWeight: FontWeight.bold,
color:
MzanziInnovationHub.of(context)!.theme.secondaryColor(),
), ),
Visibility( ),
visible: widget.type == "personal", Divider(
child: IconButton( color:
icon: const Icon(Icons.edit), MzanziInnovationHub.of(context)!.theme.secondaryColor()),
alignment: Alignment.topRight, const SizedBox(height: 10),
getMedAidDetailsFields(),
],
),
),
Visibility(
visible: widget.type == "personal",
child: Positioned(
right: 0,
bottom: 0,
child: MihFloatingMenu(
icon: Icons.add,
animatedIcon: AnimatedIcons.menu_close,
children: [
SpeedDialChild(
child: Icon(
Icons.edit,
color: color:
MzanziInnovationHub.of(context)!.theme.secondaryColor(), MzanziInnovationHub.of(context)!.theme.primaryColor(),
onPressed: () {
Navigator.of(context).pushNamed('/patient-profile/edit',
arguments: PatientEditArguments(
widget.signedInUser, widget.selectedPatient));
},
), ),
label: "Edit Profile",
labelBackgroundColor:
MzanziInnovationHub.of(context)!.theme.successColor(),
labelStyle: TextStyle(
color:
MzanziInnovationHub.of(context)!.theme.primaryColor(),
fontWeight: FontWeight.bold,
),
backgroundColor:
MzanziInnovationHub.of(context)!.theme.successColor(),
onTap: () {
Navigator.of(context).pushNamed('/patient-profile/edit',
arguments: PatientEditArguments(
widget.signedInUser, widget.selectedPatient));
},
) )
]), ],
Divider(
color: MzanziInnovationHub.of(context)!.theme.secondaryColor()),
const SizedBox(height: 10),
getPatientDetailsField(),
const SizedBox(height: 10),
Text(
"Medical Aid Details",
textAlign: TextAlign.center,
style: TextStyle(
fontSize: 25,
fontWeight: FontWeight.bold,
color: MzanziInnovationHub.of(context)!.theme.secondaryColor(),
), ),
), ),
Divider( ),
color: MzanziInnovationHub.of(context)!.theme.secondaryColor()), ],
const SizedBox(height: 10),
getMedAidDetailsFields(),
],
),
); );
} }
} }

View File

@@ -11,7 +11,9 @@ import flutter_tts
import geolocator_apple import geolocator_apple
import local_auth_darwin import local_auth_darwin
import mobile_scanner import mobile_scanner
import path_provider_foundation
import printing import printing
import share_plus
import shared_preferences_foundation import shared_preferences_foundation
import syncfusion_pdfviewer_macos import syncfusion_pdfviewer_macos
import url_launcher_macos import url_launcher_macos
@@ -24,7 +26,9 @@ func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) {
GeolocatorPlugin.register(with: registry.registrar(forPlugin: "GeolocatorPlugin")) GeolocatorPlugin.register(with: registry.registrar(forPlugin: "GeolocatorPlugin"))
FLALocalAuthPlugin.register(with: registry.registrar(forPlugin: "FLALocalAuthPlugin")) FLALocalAuthPlugin.register(with: registry.registrar(forPlugin: "FLALocalAuthPlugin"))
MobileScannerPlugin.register(with: registry.registrar(forPlugin: "MobileScannerPlugin")) MobileScannerPlugin.register(with: registry.registrar(forPlugin: "MobileScannerPlugin"))
PathProviderPlugin.register(with: registry.registrar(forPlugin: "PathProviderPlugin"))
PrintingPlugin.register(with: registry.registrar(forPlugin: "PrintingPlugin")) PrintingPlugin.register(with: registry.registrar(forPlugin: "PrintingPlugin"))
SharePlusMacosPlugin.register(with: registry.registrar(forPlugin: "SharePlusMacosPlugin"))
SharedPreferencesPlugin.register(with: registry.registrar(forPlugin: "SharedPreferencesPlugin")) SharedPreferencesPlugin.register(with: registry.registrar(forPlugin: "SharedPreferencesPlugin"))
SyncfusionFlutterPdfViewerPlugin.register(with: registry.registrar(forPlugin: "SyncfusionFlutterPdfViewerPlugin")) SyncfusionFlutterPdfViewerPlugin.register(with: registry.registrar(forPlugin: "SyncfusionFlutterPdfViewerPlugin"))
UrlLauncherPlugin.register(with: registry.registrar(forPlugin: "UrlLauncherPlugin")) UrlLauncherPlugin.register(with: registry.registrar(forPlugin: "UrlLauncherPlugin"))

View File

@@ -470,6 +470,14 @@ packages:
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "2.0.27" version: "2.0.27"
flutter_speed_dial:
dependency: "direct main"
description:
name: flutter_speed_dial
sha256: "698a037274a66dbae8697c265440e6acb6ab6cae9ac5f95c749e7944d8f28d41"
url: "https://pub.dev"
source: hosted
version: "7.0.0"
flutter_swipe_detector: flutter_swipe_detector:
dependency: "direct main" dependency: "direct main"
description: description:
@@ -856,6 +864,30 @@ packages:
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "1.1.0" version: "1.1.0"
path_provider:
dependency: transitive
description:
name: path_provider
sha256: "50c5dd5b6e1aaf6fb3a78b33f6aa3afca52bf903a8a5298f53101fdaee55bbcd"
url: "https://pub.dev"
source: hosted
version: "2.1.5"
path_provider_android:
dependency: transitive
description:
name: path_provider_android
sha256: "0ca7359dad67fd7063cb2892ab0c0737b2daafd807cf1acecd62374c8fae6c12"
url: "https://pub.dev"
source: hosted
version: "2.2.16"
path_provider_foundation:
dependency: transitive
description:
name: path_provider_foundation
sha256: "4843174df4d288f5e29185bd6e72a6fbdf5a4a4602717eed565497429f179942"
url: "https://pub.dev"
source: hosted
version: "2.4.1"
path_provider_linux: path_provider_linux:
dependency: transitive dependency: transitive
description: description:
@@ -992,6 +1024,22 @@ packages:
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "3.0.1" version: "3.0.1"
share_plus:
dependency: "direct main"
description:
name: share_plus
sha256: fce43200aa03ea87b91ce4c3ac79f0cecd52e2a7a56c7a4185023c271fbfa6da
url: "https://pub.dev"
source: hosted
version: "10.1.4"
share_plus_platform_interface:
dependency: transitive
description:
name: share_plus_platform_interface
sha256: cc012a23fc2d479854e6c80150696c4a5f5bb62cb89af4de1c505cf78d0a5d0b
url: "https://pub.dev"
source: hosted
version: "5.0.2"
shared_preferences: shared_preferences:
dependency: transitive dependency: transitive
description: description:

View File

@@ -73,6 +73,8 @@ dependencies:
flutter_chat_types: ^3.6.2 flutter_chat_types: ^3.6.2
uuid: ^4.5.1 uuid: ^4.5.1
flutter_tts: ^4.2.2 flutter_tts: ^4.2.2
flutter_speed_dial: ^7.0.0
share_plus: ^10.1.4
dev_dependencies: dev_dependencies:
flutter_test: flutter_test:

View File

@@ -11,6 +11,7 @@
#include <geolocator_windows/geolocator_windows.h> #include <geolocator_windows/geolocator_windows.h>
#include <local_auth_windows/local_auth_plugin.h> #include <local_auth_windows/local_auth_plugin.h>
#include <printing/printing_plugin.h> #include <printing/printing_plugin.h>
#include <share_plus/share_plus_windows_plugin_c_api.h>
#include <syncfusion_pdfviewer_windows/syncfusion_pdfviewer_windows_plugin.h> #include <syncfusion_pdfviewer_windows/syncfusion_pdfviewer_windows_plugin.h>
#include <url_launcher_windows/url_launcher_windows.h> #include <url_launcher_windows/url_launcher_windows.h>
@@ -25,6 +26,8 @@ void RegisterPlugins(flutter::PluginRegistry* registry) {
registry->GetRegistrarForPlugin("LocalAuthPlugin")); registry->GetRegistrarForPlugin("LocalAuthPlugin"));
PrintingPluginRegisterWithRegistrar( PrintingPluginRegisterWithRegistrar(
registry->GetRegistrarForPlugin("PrintingPlugin")); registry->GetRegistrarForPlugin("PrintingPlugin"));
SharePlusWindowsPluginCApiRegisterWithRegistrar(
registry->GetRegistrarForPlugin("SharePlusWindowsPluginCApi"));
SyncfusionPdfviewerWindowsPluginRegisterWithRegistrar( SyncfusionPdfviewerWindowsPluginRegisterWithRegistrar(
registry->GetRegistrarForPlugin("SyncfusionPdfviewerWindowsPlugin")); registry->GetRegistrarForPlugin("SyncfusionPdfviewerWindowsPlugin"));
UrlLauncherWindowsRegisterWithRegistrar( UrlLauncherWindowsRegisterWithRegistrar(

View File

@@ -8,6 +8,7 @@ list(APPEND FLUTTER_PLUGIN_LIST
geolocator_windows geolocator_windows
local_auth_windows local_auth_windows
printing printing
share_plus
syncfusion_pdfviewer_windows syncfusion_pdfviewer_windows
url_launcher_windows url_launcher_windows
) )