import 'package:flutter/material.dart'; import 'package:google_nav_bar/google_nav_bar.dart'; import 'package:patient_manager/components/homeTile.dart'; import 'package:patient_manager/components/mihAppBar.dart'; import 'package:patient_manager/components/mihAppDrawer.dart'; import 'package:patient_manager/components/popUpMessages/mihDeleteMessage.dart'; import 'package:patient_manager/components/mihLoadingCircle.dart'; import 'package:patient_manager/components/popUpMessages/mihWarningMessage.dart'; import 'package:patient_manager/components/popUpMessages/mihErrorMessage.dart'; import 'package:patient_manager/components/popUpMessages/mihSuccessMessage.dart'; import 'package:patient_manager/env/env.dart'; import 'package:patient_manager/main.dart'; import 'package:patient_manager/objects/appUser.dart'; import 'package:patient_manager/objects/arguments.dart'; import 'package:patient_manager/objects/business.dart'; import 'package:patient_manager/objects/businessUser.dart'; class HomeTileGrid extends StatefulWidget { final AppUser signedInUser; final BusinessUser? businessUser; final Business? business; const HomeTileGrid({ super.key, required this.signedInUser, required this.businessUser, required this.business, }); @override State createState() => _HomeTileGridState(); } class _HomeTileGridState extends State { late List> personalTileList = []; late List> businessTileList = []; late List> devTileList = []; late Future>>> pbswitch; int _selectedIndex = 0; final baseAPI = AppEnviroment.baseApiUrl; // late Future futureBusinessUser; // late Future futureBusiness; // late BusinessUser? businessUser; // late Business? business; // Future getBusinessUserDetails() async { // var response = await http // .get(Uri.parse("$baseAPI/business-user/${widget.signedInUser.app_id}")); // if (response.statusCode == 200) { // String body = response.body; // var decodedData = jsonDecode(body); // BusinessUser business_User = BusinessUser.fromJson(decodedData); // return business_User; // } else { // return null; // } // } // Future getBusinessDetails() async { // var response = await http.get( // Uri.parse("$baseAPI/business/app_id/${widget.signedInUser.app_id}")); // if (response.statusCode == 200) { // String body = response.body; // var decodedData = jsonDecode(body); // Business business = Business.fromJson(decodedData); // return business; // } else { // return null; // } // } void setAppsNewPersonal(List> tileList) { if (widget.signedInUser.fname == "") { tileList.add( [ Icons.perm_identity, "Setup Profie", () { Navigator.of(context) .pushNamed('/profile', arguments: widget.signedInUser); // Navigator.popAndPushNamed(context, '/patient-manager', // arguments: widget.userEmail); } ], ); } } void setAppsNewBusiness(List> tileList) { tileList.add( [ Icons.add_business_outlined, "Setup Business", () { Navigator.of(context).pushNamed( '/business/add', arguments: widget.signedInUser, ); } ], ); } void setAppsPersonal(List> tileList) { tileList.add( [ Icons.medication, "Patient Profile", () { //comeback here Navigator.of(context).pushNamed('/patient-profile', arguments: PatientViewArguments(widget.signedInUser, null, "personal")); // Navigator.popAndPushNamed(context, '/patient-manager', // arguments: widget.userEmail); } ], ); } void setAppsBusiness(List> tileList) { if (widget.businessUser!.access == "Full") { tileList.add( [ Icons.business, "Business Profile", () { Navigator.of(context).pushNamed( '/business-profile', arguments: BusinessArguments( widget.signedInUser, widget.businessUser, widget.business, ), ); // Navigator.popAndPushNamed(context, '/patient-manager', // arguments: widget.userEmail); } ], ); } if (widget.business!.type == "Doctors Office") { tileList.add( [ Icons.medication, "Manage Patient", () { Navigator.of(context).pushNamed( '/patient-manager', arguments: BusinessArguments( widget.signedInUser, widget.businessUser, widget.business, ), ); // Navigator.popAndPushNamed(context, '/patient-manager', // arguments: widget.userEmail); } ], ); } } void setAppsDev(List> tileList) { if (AppEnviroment.getEnv() == "Dev") { tileList.add( [ Icons.change_circle, "Loading - Dev", () { showDialog( context: context, builder: (context) { return const Mihloadingcircle(); }, ); } ], ); tileList.add( [ Icons.add_business_outlined, "Setup Bus - Dev", () { Navigator.of(context).pushNamed( '/business/add', arguments: widget.signedInUser, ); } ], ); tileList.add([ Icons.add_circle_outline, "Add Pat - Dev", () { Navigator.of(context).pushNamed('/patient-manager/add', arguments: widget.signedInUser); } ]); tileList.add( [ Icons.perm_identity, "Upd Prof - Dev", () { Navigator.of(context) .pushNamed('/profile', arguments: widget.signedInUser); // Navigator.popAndPushNamed(context, '/patient-manager', // arguments: widget.userEmail); } ], ); tileList.add([ Icons.warning_amber_rounded, "Warn - Dev", () { showDialog( context: context, builder: (context) { return const MIHWarningMessage(warningType: "No Access"); }, ); } ]); tileList.add([ Icons.error_outline_outlined, "Error - Dev", () { showDialog( context: context, builder: (context) { return const MIHErrorMessage(errorType: "Invalid Username"); }, ); } ]); tileList.add([ Icons.check_circle_outline_outlined, "Success - Dev", () { showDialog( context: context, builder: (context) { return const MIHSuccessMessage( successType: "Success", successMessage: "Congratulations! Your account has been created successfully. You are log in and can start exploring.\n\nPlease note: more apps will appear once you update your profile."); }, ); } ]); tileList.add([ Icons.delete_forever_outlined, "Delete - Dev", () { showDialog( context: context, builder: (context) { return MIHDeleteMessage(deleteType: "File", onTap: () {}); }, ); } ]); } } Future>>> setApps( List> personalTileList, List> businessTileList) async { //print(widget.businessUser); if (widget.signedInUser.fname == "") { //print("New personal user"); setAppsNewPersonal(personalTileList); } else if (widget.signedInUser.type == "personal") { //print("existing personal user"); setAppsPersonal(personalTileList); } else if (widget.businessUser == null) { //print("new business user"); setAppsPersonal(personalTileList); setAppsNewBusiness(businessTileList); } else { //business //print("existing business user"); setAppsPersonal(personalTileList); setAppsBusiness(businessTileList); } if (AppEnviroment.getEnv() == "Dev") { //print("Dev Enviroment"); setAppsDev(personalTileList); setAppsDev(businessTileList); } return [personalTileList, businessTileList]; // pbswitch.add(personalTileList); // pbswitch.add(businessTileList); } Color getPrim() { return MzanziInnovationHub.of(context)!.theme.secondaryColor(); } Color getSec() { return MzanziInnovationHub.of(context)!.theme.primaryColor(); } Widget buildtile(tile) { //setColor(); return Padding( padding: const EdgeInsets.all(10), child: HomeTile( onTap: tile[2], tileIcon: tile[0], tileName: tile[1], p: getPrim(), s: getSec(), ), ); } bool isBusinessUser(AppUser signedInUser) { if (signedInUser.type == "personal") { return false; } else { return true; } } @override void initState() { pbswitch = setApps(personalTileList, businessTileList); super.initState(); } @override Widget build(BuildContext context) { var size = MediaQuery.of(context).size; double width = size.width; double height = size.height; // return FutureBuilder( // future: getBusinessDetails(), // builder: (BuildContext context, AsyncSnapshot snapshot) { // if (snapshot.connectionState == ConnectionState.done && // pbswitch.isNotEmpty) { return Scaffold( appBar: const MIHAppBar(barTitle: "Mzansi Innovation Hub"), drawer: MIHAppDrawer( signedInUser: widget.signedInUser, //logo: MzanziInnovationHub.of(context)!.theme.logoImage(), //logo, ), body: FutureBuilder( future: pbswitch, builder: (ctx, snapshot) { if (snapshot.connectionState == ConnectionState.done) { var apps = snapshot.requireData; return Container( width: width, height: height, child: GridView.builder( padding: EdgeInsets.fromLTRB(width / 6, height / 16, width / 6, 0), //EdgeInsets.symmetric(horizontal: width / 6), itemCount: apps[_selectedIndex].length, gridDelegate: const SliverGridDelegateWithMaxCrossAxisExtent( maxCrossAxisExtent: 200), //const SliverGridDelegateWithFixedCrossAxisCount(crossAxisCount: 3), itemBuilder: (context, index) { var tile = apps[_selectedIndex][index]; //setState(() {}); return buildtile(tile); }, ), ); } return const Mihloadingcircle(); }, ), bottomNavigationBar: Visibility( visible: isBusinessUser(widget.signedInUser), child: Padding( padding: const EdgeInsets.all(15.0), child: GNav( //hoverColor: Colors.lightBlueAccent, color: MzanziInnovationHub.of(context)!.theme.secondaryColor(), iconSize: 35.0, activeColor: MzanziInnovationHub.of(context)!.theme.primaryColor(), tabBackgroundColor: MzanziInnovationHub.of(context)!.theme.secondaryColor(), //gap: 20, //padding: EdgeInsets.all(15), tabs: [ GButton( icon: Icons.perm_identity, text: "Personal", onPressed: () { setState(() { _selectedIndex = 0; }); }, ), GButton( icon: Icons.business_center, text: "Business", onPressed: () { setState(() { _selectedIndex = 1; }); }, ), ], selectedIndex: _selectedIndex, ), ), ), ); } }