From 5b5ad1f7e884eedcdd19420405ce7cf79886dee1 Mon Sep 17 00:00:00 2001 From: Yasien Mac Mini Date: Wed, 26 Mar 2025 11:48:59 +0200 Subject: [PATCH] new personal home tool --- .../package_tools/mih_personal_home.dart | 240 ++++++++++++++++++ 1 file changed, 240 insertions(+) create mode 100644 Frontend/lib/mih_packages/mih_home/package_tools/mih_personal_home.dart diff --git a/Frontend/lib/mih_packages/mih_home/package_tools/mih_personal_home.dart b/Frontend/lib/mih_packages/mih_home/package_tools/mih_personal_home.dart new file mode 100644 index 00000000..726de997 --- /dev/null +++ b/Frontend/lib/mih_packages/mih_home/package_tools/mih_personal_home.dart @@ -0,0 +1,240 @@ +import 'package:Mzansi_Innovation_Hub/main.dart'; +import 'package:Mzansi_Innovation_Hub/mih_components/mih_inputs_and_buttons/mih_search_input.dart'; +import 'package:Mzansi_Innovation_Hub/mih_components/mih_layout/mih_single_child_scroll.dart'; +import 'package:Mzansi_Innovation_Hub/mih_components/mih_package/mih-app_tool_body.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/business.dart'; +import 'package:Mzansi_Innovation_Hub/mih_objects/business_user.dart'; +import 'package:Mzansi_Innovation_Hub/mih_packages/about_mih/package_tile/about_mih_tile.dart'; +import 'package:Mzansi_Innovation_Hub/mih_packages/access_review/package_tile/mih_access_tile.dart'; +import 'package:Mzansi_Innovation_Hub/mih_packages/calculator/package_tiles/mih_calculator_tile.dart'; +import 'package:Mzansi_Innovation_Hub/mih_packages/calendar/package_tiles/mzansi_calendar_tile.dart'; +import 'package:Mzansi_Innovation_Hub/mih_packages/mzansi_ai/package_tiles/mzansi_ai_tile.dart'; +import 'package:Mzansi_Innovation_Hub/mih_packages/mzansi_profile/personal_profile/package_tiles/mzansi_profile_tile.dart'; +import 'package:Mzansi_Innovation_Hub/mih_packages/mzansi_wallet/package_tiles/mih_wallet_tile.dart'; +import 'package:Mzansi_Innovation_Hub/mih_packages/patient_profile/pat_profile/package_tiles/patient_profile_tile.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter/services.dart'; + +class MihPersonalHome extends StatefulWidget { + final AppUser signedInUser; + final bool personalSelected; + final Business? business; + final BusinessUser? businessUser; + final ImageProvider? propicFile; + + const MihPersonalHome({ + super.key, + required this.signedInUser, + required this.personalSelected, + required this.business, + required this.businessUser, + required this.propicFile, + }); + + @override + State createState() => _MihPersonalHomeState(); +} + +class _MihPersonalHomeState extends State { + final FocusNode _focusNode = FocusNode(); + final TextEditingController searchController = TextEditingController(); + String packageSearch = ""; + late List personalPackages; + double packageSize = 100; + + List setPersonalPackages() { + List temp = []; + //=============== Mzansi Profile =============== + temp.add( + MzansiProfileTile( + signedInUser: widget.signedInUser, + propicFile: widget.propicFile, + packageSize: packageSize, + ), + ); + //=============== Mzansi Wallet =============== + temp.add( + MihWalletTile( + signedInUser: widget.signedInUser, + packageSize: packageSize, + ), + ); + //=============== Patient Profile =============== + temp.add( + PatientProfileTile( + arguments: PatientViewArguments( + widget.signedInUser, + null, + null, + null, + "personal", + ), + packageSize: packageSize, + ), + ); + //=============== Mzansi AI =============== + temp.add( + MzansiAiTile( + signedInUser: widget.signedInUser, + packageSize: packageSize, + ), + ); + //=============== Calendar =============== + temp.add( + MzansiCalendarTile( + arguments: CalendarArguments( + widget.signedInUser, + widget.personalSelected, + widget.business, + widget.businessUser, + ), + packageSize: packageSize, + ), + ); + //=============== Calculator =============== + temp.add( + MihCalculatorTile( + personalSelected: widget.personalSelected, + packageSize: packageSize, + ), + ); + //=============== MIH Access =============== + temp.add( + MihAccessTile( + signedInUser: widget.signedInUser, + packageSize: packageSize, + ), + ); + //=============== About MIH =============== + temp.add( + AboutMihTile(packageSize: packageSize), + ); + return temp; + } + + EdgeInsets getPadding(double width, double height) { + if (MzanziInnovationHub.of(context)!.theme.screenType == "mobile") { + double mobilePadding = 10; + return EdgeInsets.only( + left: mobilePadding, + right: mobilePadding, + bottom: mobilePadding, + ); + } else { + return EdgeInsets.only( + left: width / 13, + right: width / 13, + bottom: height / 15, + ); + } + } + + @override + void dispose() { + super.dispose(); + searchController.dispose(); + } + + @override + void initState() { + super.initState(); + personalPackages = setPersonalPackages(); + } + + @override + Widget build(BuildContext context) { + final Size size = MediaQuery.sizeOf(context); + final double width = size.width; + final double height = size.height; + + return MihAppToolBody( + borderOn: true, + bodyItem: getBody(width, height), + ); + } + + Widget getBody(double width, double height) { + return MihSingleChildScroll( + child: Column( + children: [ + const Text( + "Personal Home", + style: TextStyle( + fontWeight: FontWeight.bold, + fontSize: 25, + ), + ), + const SizedBox( + height: 10, + ), + Row( + mainAxisAlignment: MainAxisAlignment.center, + mainAxisSize: MainAxisSize.max, + children: [ + Flexible( + flex: 4, + child: KeyboardListener( + focusNode: _focusNode, + autofocus: true, + onKeyEvent: (event) async { + if (event is KeyDownEvent && + event.logicalKey == LogicalKeyboardKey.enter) { + setState(() { + packageSearch = searchController.text; + }); + } + }, + child: SizedBox( + child: MIHSearchField( + controller: searchController, + hintText: "Search Mzansi Packages", + required: false, + editable: true, + onTap: () { + setState(() { + packageSearch = searchController.text; + }); + }, + ), + ), + ), + ), + Flexible( + flex: 1, + child: IconButton( + //padding: const EdgeInsets.all(0), + onPressed: () { + setState(() { + packageSearch = ""; + searchController.clear(); + }); + }, + icon: const Icon( + Icons.filter_alt_off, + size: 30, + ), + ), + ), + ], + ), + const SizedBox(height: 10), + GridView.builder( + physics: const NeverScrollableScrollPhysics(), + shrinkWrap: true, + padding: getPadding(width, height), + // shrinkWrap: true, + itemCount: personalPackages.length, + gridDelegate: SliverGridDelegateWithMaxCrossAxisExtent( + maxCrossAxisExtent: packageSize, + ), + itemBuilder: (context, index) { + return personalPackages[index]; + }, + ), + ], + ), + ); + } +}