diff --git a/Frontend/lib/mih_components/mih_package_components/Example/package_tools/package_tool_one.dart b/Frontend/lib/mih_components/mih_package_components/Example/package_tools/package_tool_one.dart index f3ad21d9..022a2eaa 100644 --- a/Frontend/lib/mih_components/mih_package_components/Example/package_tools/package_tool_one.dart +++ b/Frontend/lib/mih_components/mih_package_components/Example/package_tools/package_tool_one.dart @@ -1,12 +1,16 @@ import 'package:file_picker/file_picker.dart'; import 'package:flutter/material.dart'; import 'package:flutter_speed_dial/flutter_speed_dial.dart'; +import 'package:geolocator/geolocator.dart'; import 'package:mzansi_innovation_hub/main.dart'; import 'package:mzansi_innovation_hub/mih_components/mih_objects/app_user.dart'; +import 'package:mzansi_innovation_hub/mih_components/mih_objects/business.dart'; import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_banner_ad.dart'; +import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_business_profile_preview.dart'; import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_personal_profile_preview.dart'; import 'package:mzansi_innovation_hub/mih_packages/mzansi_profile/business_profile/components/mih_business_card.dart'; import 'package:mzansi_innovation_hub/mih_services/mih_alert_services.dart'; +import 'package:mzansi_innovation_hub/mih_services/mih_location_services.dart'; import 'package:mzansi_innovation_hub/mih_services/mih_validation_services.dart'; import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_single_child_scroll.dart'; import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_button.dart'; @@ -28,9 +32,11 @@ import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_ class PackageToolOne extends StatefulWidget { final AppUser user; + final Business business; const PackageToolOne({ super.key, required this.user, + required this.business, }); @override @@ -57,6 +63,8 @@ class _PackageToolOneState extends State { bool switchpositioin = true; final FocusNode searchFocusNode = FocusNode(); final _formKey = GlobalKey(); + late Future myCoordinates; + String myLocation = ""; void showTestFullWindow() { showDialog( @@ -139,6 +147,8 @@ class _PackageToolOneState extends State { // const NetworkImage( // "https://lh3.googleusercontent.com/nW4ZZ89Q1ATz7Ht3nsAVWXL_cwNi4gNusqQZiL60UuuI3FG-VM7bTYDoJ-sUr2kDTdorfQYjxo5PjDM-0MO5rA=s512"); }); + + // myCoordinates = MIHLocationAPI().getGPSPosition(context); } Widget getBody(double width) { @@ -172,10 +182,95 @@ class _PackageToolOneState extends State { ], ), const SizedBox(height: 20), + Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Text( + "Personal Preview", + textAlign: TextAlign.center, + style: TextStyle( + fontSize: 15, + fontWeight: FontWeight.bold, + color: MzanziInnovationHub.of(context)! + .theme + .secondaryColor(), + ), + ), + ], + ), + const SizedBox(height: 10), MihPersonalProfilePreview( user: widget.user, ), const SizedBox(height: 10), + Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Text( + "Business Preview", + textAlign: TextAlign.center, + style: TextStyle( + fontSize: 15, + fontWeight: FontWeight.bold, + color: MzanziInnovationHub.of(context)! + .theme + .secondaryColor(), + ), + ), + ], + ), + const SizedBox(height: 10), + FutureBuilder( + future: MIHLocationAPI().getGPSPosition(context), + builder: (context, asyncSnapshot) { + // print(asyncSnapshot.connectionState); + if (asyncSnapshot.connectionState == + ConnectionState.waiting) { + return Container( + width: 150, + height: 50, + color: Colors.black, + child: Center(child: CircularProgressIndicator()), + ); + } else if (asyncSnapshot.hasError || + !asyncSnapshot.hasData || + asyncSnapshot.data == null) { + return Container( + width: 150, + height: 50, + color: Colors.red, + child: Center(child: Text("Location unavailable")), + ); + } else { + final myLocation = asyncSnapshot.data + .toString() + .replaceAll("Latitude: ", "") + .replaceAll("Longitude: ", ""); + print("My Location is this: $myLocation"); + return MihBusinessProfilePreview( + business: widget.business, + myLocation: myLocation, + ); + } + // // print(asyncSnapshot.requireData); + // if (asyncSnapshot.connectionState == + // ConnectionState.done && + // asyncSnapshot.hasData) { + // print(asyncSnapshot.requireData); + // myLocation = asyncSnapshot.requireData.toString(); + // return MihBusinessProfilePreview( + // business: widget.business, + // myLocation: myLocation, + // ); + // } else { + // return Container( + // width: 150, + // height: 50, + // color: Colors.black, + // ); + // } + }), + const SizedBox(height: 10), MihBusinessCard( businessName: "Mzansi Innovation Hub", cellNumber: "0788300006", diff --git a/Frontend/lib/mih_components/mih_package_components/mih_business_profile_preview.dart b/Frontend/lib/mih_components/mih_package_components/mih_business_profile_preview.dart new file mode 100644 index 00000000..d661b7b6 --- /dev/null +++ b/Frontend/lib/mih_components/mih_package_components/mih_business_profile_preview.dart @@ -0,0 +1,94 @@ +import 'package:file_picker/file_picker.dart'; +import 'package:flutter/material.dart'; +import 'package:mzansi_innovation_hub/main.dart'; +import 'package:mzansi_innovation_hub/mih_components/mih_objects/business.dart'; +import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_circle_avatar.dart'; +import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_icons.dart'; +import 'package:mzansi_innovation_hub/mih_services/mih_file_services.dart'; +import 'package:mzansi_innovation_hub/mih_services/mih_location_services.dart'; + +class MihBusinessProfilePreview extends StatefulWidget { + final Business business; + final String myLocation; + const MihBusinessProfilePreview({ + super.key, + required this.business, + required this.myLocation, + }); + + @override + State createState() => + _MihBusinessProfilePreviewState(); +} + +class _MihBusinessProfilePreviewState extends State { + late Future futureImageUrl; + PlatformFile? file; + + String calculateDistance() { + double distanceInKm = MIHLocationAPI().getDistanceInMeaters( + widget.myLocation, widget.business.gps_location) / + 1000; + return "${distanceInKm.toStringAsFixed(2)} km"; + } + + @override + void initState() { + super.initState(); + futureImageUrl = + MihFileApi.getMinioFileUrl(widget.business.logo_path, context); + } + + @override + Widget build(BuildContext context) { + double profilePictureWidth = 60; + return Row( + children: [ + FutureBuilder( + future: futureImageUrl, + builder: (context, asyncSnapshot) { + if (asyncSnapshot.connectionState == ConnectionState.done && + asyncSnapshot.hasData) { + return MihCircleAvatar( + imageFile: NetworkImage(asyncSnapshot.requireData), + width: profilePictureWidth, + editable: false, + fileNameController: TextEditingController(), + userSelectedfile: file, + frameColor: + MzanziInnovationHub.of(context)!.theme.secondaryColor(), + backgroundColor: + MzanziInnovationHub.of(context)!.theme.primaryColor(), + onChange: () {}, + ); + } else { + return Icon( + MihIcons.mihLogo, + size: profilePictureWidth, + ); + } + }), + const SizedBox(width: 15), + Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + widget.business.Name, + style: TextStyle( + fontWeight: FontWeight.bold, + fontSize: 18, + ), + ), + Text( + calculateDistance(), + style: TextStyle( + fontWeight: FontWeight.bold, + fontSize: 12, + ), + ), + ], + ) + ], + ); + } +} diff --git a/Frontend/lib/mih_components/mih_package_components/mih_personal_profile_preview.dart b/Frontend/lib/mih_components/mih_package_components/mih_personal_profile_preview.dart index 6d26dd0d..f8cb958f 100644 --- a/Frontend/lib/mih_components/mih_package_components/mih_personal_profile_preview.dart +++ b/Frontend/lib/mih_components/mih_package_components/mih_personal_profile_preview.dart @@ -64,7 +64,7 @@ class _MihPersonalProfilePreviewState extends State { crossAxisAlignment: CrossAxisAlignment.start, children: [ Text( - "@${widget.user.username}", + widget.user.username, style: TextStyle( fontWeight: FontWeight.bold, fontSize: 18, diff --git a/Frontend/lib/mih_packages/mih_home/mih_home_legacy.dart b/Frontend/lib/mih_packages/mih_home/mih_home_legacy.dart index 17346b69..8ee7050d 100644 --- a/Frontend/lib/mih_packages/mih_home/mih_home_legacy.dart +++ b/Frontend/lib/mih_packages/mih_home/mih_home_legacy.dart @@ -902,8 +902,8 @@ class _MIHHomeLegacyState extends State { MIHLocationAPI().getGPSPosition(context).then((position) { if (position != null) { print(position); - print( - "Distance: ${MIHLocationAPI().getDistanceInMeaters(position, position)}m"); + // print( + // "Distance: ${MIHLocationAPI().getDistanceInMeaters(position, position)}m"); } }); }, 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 index 68c67af9..e1747155 100644 --- 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 @@ -162,7 +162,10 @@ class _MihPersonalHomeState extends State onTap: () { Navigator.of(context).pushNamed( '/package-dev', - arguments: widget.signedInUser, + arguments: TestArguments( + widget.signedInUser, + widget.business, + ), ); }, appName: "Test", diff --git a/Frontend/lib/mih_packages/mzansi_profile/personal_profile/package_tools/mih_personal_profile.dart b/Frontend/lib/mih_packages/mzansi_profile/personal_profile/package_tools/mih_personal_profile.dart index e64b8d95..df1b6575 100644 --- a/Frontend/lib/mih_packages/mzansi_profile/personal_profile/package_tools/mih_personal_profile.dart +++ b/Frontend/lib/mih_packages/mzansi_profile/personal_profile/package_tools/mih_personal_profile.dart @@ -468,7 +468,7 @@ class _MihPersonalProfileState extends State { ), FittedBox( child: Text( - "@${widget.arguments.signedInUser.username}", + widget.arguments.signedInUser.username, style: TextStyle( fontSize: 35, fontWeight: FontWeight.bold, diff --git a/Frontend/lib/mih_services/mih_location_services.dart b/Frontend/lib/mih_services/mih_location_services.dart index 2ea3172c..4cdc0848 100644 --- a/Frontend/lib/mih_services/mih_location_services.dart +++ b/Frontend/lib/mih_services/mih_location_services.dart @@ -39,9 +39,13 @@ class MIHLocationAPI { } } - double getDistanceInMeaters(Position startPosition, Position endPosition) { - return Geolocator.distanceBetween(startPosition.latitude, - startPosition.longitude, endPosition.latitude, endPosition.longitude); + double getDistanceInMeaters(String startPosition, String endPosition) { + double startLatitude = double.parse(startPosition.split(", ")[0]); + double startLogitude = double.parse(startPosition.split(", ")[1]); + double endLatitude = double.parse(endPosition.split(", ")[0]); + double endLogitude = double.parse(endPosition.split(", ")[1]); + return Geolocator.distanceBetween( + startLatitude, startLogitude, endLatitude, endLogitude); } void showPermissionError(BuildContext context) {