From 62c3c47fe91d49d368d1b1585ace1528301fba2d Mon Sep 17 00:00:00 2001 From: "mirza.shafique" Date: Mon, 6 Mar 2023 15:27:09 +0300 Subject: [PATCH] hmg wifi implementation 1.0 --- assets/langs/ar-SA.json | 4 +- assets/langs/en-US.json | 4 +- lib/classes/consts.dart | 4 +- lib/generated/codegen_loader.g.dart | 12 +- lib/generated/locale_keys.g.dart | 2 + lib/provider/hmg_connection_provider.dart | 29 ++- lib/ui/landing/dashboard_screen.dart | 11 +- lib/ui/landing/today_attendance_screen2.dart | 27 ++- lib/ui/login/login_screen.dart | 39 +--- .../button/hmg_connectivity_button.dart | 137 ++++++++---- lib/widgets/mark_attendance_widget.dart | 196 ++++++++++-------- 11 files changed, 284 insertions(+), 181 deletions(-) diff --git a/assets/langs/ar-SA.json b/assets/langs/ar-SA.json index 84e0e45..0acec79 100644 --- a/assets/langs/ar-SA.json +++ b/assets/langs/ar-SA.json @@ -526,5 +526,7 @@ "myTeam": "فريقي", "youCanPlayDemo": "لكن يمكنك لعب العرض", "connectHmgWifi": "قم بتوصيل HMG WIFI", - "connectedHmgWifi": "اتصال HMG WIFI" + "connectedHmgWifi": "افصل HMG WIFI", + "networkMustHMG": "يجب أن تكون الشبكة متصلة بـ HMG", + "connectedWithHmg": "تم الاتصال بنجاح مع HMG WIFI" } \ No newline at end of file diff --git a/assets/langs/en-US.json b/assets/langs/en-US.json index fc1a2be..1564c87 100644 --- a/assets/langs/en-US.json +++ b/assets/langs/en-US.json @@ -526,5 +526,7 @@ "myTeam" : "My Team", "youCanPlayDemo": "But you can play demo", "connectHmgWifi": "Connect HMG WIFI", - "connectedHmgWifi": "Connected HMG WIFI" + "connectedHmgWifi": "Disconnect HMG WIFI", + "networkMustHMG": "Network must be connected with HMG", + "connectedWithHmg": "Successfully Connected with HMG WIFI" } \ No newline at end of file diff --git a/lib/classes/consts.dart b/lib/classes/consts.dart index 96fd4b0..0559996 100644 --- a/lib/classes/consts.dart +++ b/lib/classes/consts.dart @@ -3,8 +3,8 @@ import 'package:mohem_flutter_app/ui/marathon/widgets/question_card.dart'; class ApiConsts { //static String baseUrl = "http://10.200.204.20:2801/"; // Local server // static String baseUrl = "https://erptstapp.srca.org.sa"; // SRCA server - // static String baseUrl = "https://uat.hmgwebservices.com"; // UAT server - static String baseUrl = "https://hmgwebservices.com"; // Live server + static String baseUrl = "https://uat.hmgwebservices.com"; // UAT server + // static String baseUrl = "https://hmgwebservices.com"; // Live server static String baseUrlServices = baseUrl + "/Services/"; // server // static String baseUrlServices = "https://api.cssynapses.com/tangheem/"; // Live server static String utilitiesRest = baseUrlServices + "Utilities.svc/REST/"; diff --git a/lib/generated/codegen_loader.g.dart b/lib/generated/codegen_loader.g.dart index f3497d3..7895c62 100644 --- a/lib/generated/codegen_loader.g.dart +++ b/lib/generated/codegen_loader.g.dart @@ -540,7 +540,11 @@ class CodegenLoader extends AssetLoader{ "fakeLocation": ".لقد تتبعنا أنك تحاول استخدام موقع مزيف! يعتبر هذا مخالفة وقد تم إخطار الموارد البشرية", "noWinner": "حزين! لم يفز أحد اليوم.", "myTeam": "فريقي", - "youCanPlayDemo": "لكن يمكنك لعب العرض" + "youCanPlayDemo": "لكن يمكنك لعب العرض", + "connectHmgWifi": "قم بتوصيل HMG WIFI", + "connectedHmgWifi": "افصل HMG WIFI", + "networkMustHMG": "يجب أن تكون الشبكة متصلة بـ HMG", + "connectedWithHmg": "تم الاتصال بنجاح مع HMG WIFI" }; static const Map en_US = { "mohemm": "Mohemm", @@ -1068,7 +1072,11 @@ static const Map en_US = { "fakeLocation": "We traced out that you try to use a fake location! This is considered a violation, and HR has been notified.", "noWinner": "Sad! No one won today.", "myTeam": "My Team", - "youCanPlayDemo": "But you can play demo" + "youCanPlayDemo": "But you can play demo", + "connectHmgWifi": "Connect HMG WIFI", + "connectedHmgWifi": "Disconnect HMG WIFI", + "networkMustHMG": "Network must be connected with HMG", + "connectedWithHmg": "Successfully Connected with HMG WIFI" }; static const Map> mapLocales = {"ar_SA": ar_SA, "en_US": en_US}; } diff --git a/lib/generated/locale_keys.g.dart b/lib/generated/locale_keys.g.dart index d320588..f59476d 100644 --- a/lib/generated/locale_keys.g.dart +++ b/lib/generated/locale_keys.g.dart @@ -513,5 +513,7 @@ abstract class LocaleKeys { static const youCanPlayDemo = 'youCanPlayDemo'; static const connectHmgWifi = 'connectHmgWifi'; static const connectedHmgWifi = 'connectedHmgWifi'; + static const networkMustHMG = 'networkMustHMG'; + static const connectedWithHmg = 'connectedWithHmg'; } diff --git a/lib/provider/hmg_connection_provider.dart b/lib/provider/hmg_connection_provider.dart index b19c1cc..8812c89 100644 --- a/lib/provider/hmg_connection_provider.dart +++ b/lib/provider/hmg_connection_provider.dart @@ -13,25 +13,31 @@ class HmgConnectionProvider extends ChangeNotifier { } else { isConnectedToHMG = false; } - AppState().isConnectedToHMG = isConnectedToHMG; + notify(); return isConnectedToHMG; } - void connectWithHmgNetwork() async { + Future connectWithHmgNetwork() async { try { + // bool isConnected = await WiFiForIoTPlugin.connect(AppState().getMohemmWifiSSID ?? "", + // password: AppState().getMohemmWifiPassword ?? "", joinOnce: Platform.isIOS ? false : true, security: NetworkSecurity.WPA, withInternet: false); + bool isConnected = await WiFiForIoTPlugin.connect("MOHEMM-CONNECT", password: "0987654321", joinOnce: Platform.isIOS ? false : true, security: NetworkSecurity.WPA, withInternet: false); + if (isConnected) { await WiFiForIoTPlugin.forceWifiUsage(true); await Future.delayed(const Duration(seconds: 2)); - isConnectedToHMG=true; - + isConnectedToHMG = true; + notify(); } + return isConnectedToHMG; } catch (e) { isConnectedToHMG = false; - AppState().isConnectedToHMG = isConnectedToHMG; + notify(); print("----------------o----"); print(e); + return isConnectedToHMG; } } @@ -39,8 +45,17 @@ class HmgConnectionProvider extends ChangeNotifier { if (Platform.isAndroid) { await WiFiForIoTPlugin.forceWifiUsage(false); } - isConnectedToHMG = false; + + bool isDone = await WiFiForIoTPlugin.disconnect(); + if (isDone) { + isConnectedToHMG = false; + notify(); + } + return isDone; + } + + void notify() { AppState().isConnectedToHMG = isConnectedToHMG; - return await WiFiForIoTPlugin.disconnect(); + notifyListeners(); } } diff --git a/lib/ui/landing/dashboard_screen.dart b/lib/ui/landing/dashboard_screen.dart index bb361af..3801e02 100644 --- a/lib/ui/landing/dashboard_screen.dart +++ b/lib/ui/landing/dashboard_screen.dart @@ -26,6 +26,7 @@ import 'package:mohem_flutter_app/ui/landing/widget/services_widget.dart'; import 'package:mohem_flutter_app/ui/marathon/marathon_provider.dart'; import 'package:mohem_flutter_app/ui/marathon/widgets/marathon_banner.dart'; import 'package:mohem_flutter_app/widgets/bottom_sheet.dart'; +import 'package:mohem_flutter_app/widgets/button/hmg_connectivity_button.dart'; import 'package:mohem_flutter_app/widgets/mark_attendance_widget.dart'; import 'package:mohem_flutter_app/widgets/shimmer/dashboard_shimmer_widget.dart'; import 'package:mohem_flutter_app/widgets/shimmer/offers_shimmer_widget.dart'; @@ -345,7 +346,15 @@ class _DashboardScreenState extends State with WidgetsBindingOb showMyBottomSheet( context, callBackFunc: () {}, - child: MarkAttendanceWidget(model, isFromDashboard: true), + child: Column( + children: [ + const Padding( + padding: EdgeInsets.all(8.0), + child: HmgConnectivityButton(), + ), + MarkAttendanceWidget(model, isFromDashboard: true), + ], + ), ); }), ], diff --git a/lib/ui/landing/today_attendance_screen2.dart b/lib/ui/landing/today_attendance_screen2.dart index a72df34..fcd74dd 100644 --- a/lib/ui/landing/today_attendance_screen2.dart +++ b/lib/ui/landing/today_attendance_screen2.dart @@ -9,10 +9,12 @@ import 'package:mohem_flutter_app/extensions/string_extensions.dart'; import 'package:mohem_flutter_app/extensions/widget_extensions.dart'; import 'package:mohem_flutter_app/generated/locale_keys.g.dart'; import 'package:mohem_flutter_app/provider/dashboard_provider_model.dart'; +import 'package:mohem_flutter_app/widgets/button/hmg_connectivity_button.dart'; import 'package:mohem_flutter_app/widgets/circular_step_progress_bar.dart'; import 'package:mohem_flutter_app/widgets/mark_attendance_widget.dart'; import 'package:nfc_manager/nfc_manager.dart'; import 'package:provider/provider.dart'; +import 'package:sizer/sizer.dart'; import 'package:wifi_iot/wifi_iot.dart'; class TodayAttendanceScreen2 extends StatefulWidget { @@ -50,17 +52,19 @@ class _TodayAttendanceScreenState extends State { icon: const Icon(Icons.arrow_back_ios, color: Colors.white), onPressed: () => Navigator.pop(context), ), - // actions: [ - // IconButton( - // onPressed: () { - // data.fetchAttendanceTracking(context); - // }, - // icon: const Icon( - // Icons.ac_unit, - // color: Colors.white, - // ), - // ) - // ], + actions: [ + // IconButton( + // onPressed: () { + // data.fetchAttendanceTracking(context); + // }, + // icon: const Icon( + // Icons.ac_unit, + // color: Colors.white, + // ), + // ) + HmgConnectivityButton(), + 12.width, + ], ), backgroundColor: MyColors.backgroundBlackColor, body: Consumer( @@ -69,6 +73,7 @@ class _TodayAttendanceScreenState extends State { ? const Center(child: CircularProgressIndicator()) : Column( children: [ + 8.height, Container( width: double.infinity, color: MyColors.backgroundBlackColor, diff --git a/lib/ui/login/login_screen.dart b/lib/ui/login/login_screen.dart index 784b337..d0dbb28 100644 --- a/lib/ui/login/login_screen.dart +++ b/lib/ui/login/login_screen.dart @@ -172,8 +172,8 @@ class _LoginScreenState extends State { isAppOpenBySystem = (ModalRoute.of(context)!.settings.arguments ?? true) as bool; if (!kReleaseMode) { // username.text = "15444"; // Maha User - // username.text = "15153"; // Tamer User - // password.text = "Abcd@12345"; + username.text = "15153"; // Tamer User + password.text = "Abcd@1234"; // username.text = "206535"; // Hashim User // password.text = "Namira786"; @@ -185,8 +185,7 @@ class _LoginScreenState extends State { } // username.text = "15444"; - - return Scaffold( + return Scaffold( body: Column( children: [ const SizedBox(height: 23), @@ -198,8 +197,10 @@ class _LoginScreenState extends State { children: [ Row( children: [ - Expanded( - child:SizedBox(child: HmgConnectivityButton(),), + const Expanded( + child: SizedBox( + child: HmgConnectivityButton(), + ), ), Row( children: [ @@ -261,30 +262,4 @@ class _LoginScreenState extends State { ), ); } - - void connectWithHmgNetwork() async { - try { - bool isConnected = await WiFiForIoTPlugin.connect("MOHEMM-CONNECT", password: "0987654321", joinOnce: Platform.isIOS ? false : true, security: NetworkSecurity.WPA, withInternet: false); - - if (isConnected) { - await WiFiForIoTPlugin.forceWifiUsage(true); - // if (Platform.isIOS) { - // await closeWifiRequest(); - // await Future.delayed(Duration(seconds: 6)); - // } else { - // await WiFiForIoTPlugin.forceWifiUsage(true); - // } - } - } catch (e) { - print("----------------o----"); - print(e); - } - } - - Future closeWifiRequest() async { - if (Platform.isAndroid) { - await WiFiForIoTPlugin.forceWifiUsage(false); - } - return await WiFiForIoTPlugin.disconnect(); - } } diff --git a/lib/widgets/button/hmg_connectivity_button.dart b/lib/widgets/button/hmg_connectivity_button.dart index bc2b9df..dede998 100644 --- a/lib/widgets/button/hmg_connectivity_button.dart +++ b/lib/widgets/button/hmg_connectivity_button.dart @@ -1,50 +1,115 @@ import 'package:easy_localization/easy_localization.dart'; import 'package:flutter/material.dart'; import 'package:mohem_flutter_app/classes/colors.dart'; +import 'package:mohem_flutter_app/classes/utils.dart'; import 'package:mohem_flutter_app/extensions/int_extensions.dart'; import 'package:mohem_flutter_app/extensions/string_extensions.dart'; +import 'package:mohem_flutter_app/extensions/widget_extensions.dart'; import 'package:mohem_flutter_app/generated/locale_keys.g.dart'; import 'package:mohem_flutter_app/provider/hmg_connection_provider.dart'; import 'package:provider/provider.dart'; +import 'package:shimmer/shimmer.dart'; + +class HmgConnectivityButton extends StatefulWidget { + const HmgConnectivityButton({Key? key}) : super(key: key); + + @override + State createState() => _HmgConnectivityButtonState(); +} + +class _HmgConnectivityButtonState extends State with SingleTickerProviderStateMixin { + + + late Animation animation; + late AnimationController controller; + + @override + void initState() { + super.initState(); + controller = AnimationController( + duration: const Duration(milliseconds: 1500), + vsync: this, + ); + CurvedAnimation curve = CurvedAnimation(parent: controller, curve: Curves.linear); + animation = ColorTween(begin: Colors.transparent, end:MyColors.gradiantStartColor).animate(curve); + + animation.addStatusListener((status) { + if (status == AnimationStatus.completed) { + controller.reverse(); + } else if (status == AnimationStatus.dismissed) { + controller.forward(); + } + setState(() {}); + }); + controller.forward(); + } -class HmgConnectivityButton extends StatelessWidget { @override Widget build(BuildContext context) { - Provider.of(context, listen: false).checkHmgNetworkConnectivity(); - return Consumer( - builder: (_, HmgConnectionProvider foo, __) { - return Container( - height: 45, - padding: const EdgeInsets.only(left: 12, right: 12), - decoration: BoxDecoration( - borderRadius: BorderRadius.circular(200.0), - gradient: const LinearGradient( - transform: GradientRotation(.83), - begin: Alignment.topRight, - end: Alignment.bottomLeft, - colors: [ - MyColors.gradiantEndColor, - MyColors.gradiantStartColor, - ], - ), - ), - child: InkWell( - onTap: (){ - - }, - child: Row( - children: [ - const Icon( - Icons.wifi, - color: Colors.white, - ), - 12.width, - LocaleKeys.connectHmgWifi.tr().toText18(color: Colors.white), - ], - ), - ), - ); - }, + // Provider.of(context, listen: false).checkHmgNetworkConnectivity(); + return Row( + children: [ + Consumer( + builder: (_, HmgConnectionProvider provider, __) { + return AnimatedBuilder( + animation: animation, + builder: (BuildContext context, Widget? child) { + return Container( + height: 45, + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(200.0), + gradient: const LinearGradient( + transform: GradientRotation(.83), + begin: Alignment.topRight, + end: Alignment.bottomLeft, + colors: [ + MyColors.gradiantEndColor, + MyColors.gradiantStartColor, + ], + ), + ), + child: Container( + padding: const EdgeInsets.only(left: 12, right: 12), + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(200.0), + color: animation.value, + ), + child: InkWell( + onTap: () async { + if (provider.isConnectedToHMG) { + Utils.showLoading(context); + await provider.closeWifiRequest(); + Utils.hideLoading(context); + } else { + Utils.showLoading(context); + await provider.connectWithHmgNetwork(); + Utils.hideLoading(context); + } + }, + child: Row( + children: [ + Icon( + Icons.wifi, + color: provider.isConnectedToHMG ? Colors.white : Colors.grey[700], + size: 16, + ), + 8.width, + provider.isConnectedToHMG ? LocaleKeys.connectedHmgWifi.tr().toText12(color: Colors.white) : LocaleKeys.connectHmgWifi.tr().toText12(color: Colors.white), + ], + ), + ), + ), + ); + }); + }, + ), + ], ); } + + @override + void dispose() { + controller.dispose(); + super.dispose(); + } } diff --git a/lib/widgets/mark_attendance_widget.dart b/lib/widgets/mark_attendance_widget.dart index 8603f6e..30ca077 100644 --- a/lib/widgets/mark_attendance_widget.dart +++ b/lib/widgets/mark_attendance_widget.dart @@ -14,6 +14,7 @@ import 'package:mohem_flutter_app/generated/locale_keys.g.dart'; import 'package:mohem_flutter_app/models/generic_response_model.dart'; import 'package:mohem_flutter_app/models/privilege_list_model.dart'; import 'package:mohem_flutter_app/provider/dashboard_provider_model.dart'; +import 'package:mohem_flutter_app/provider/hmg_connection_provider.dart'; import 'package:mohem_flutter_app/ui/dialogs/success_dialog.dart'; import 'package:mohem_flutter_app/widgets/dialogs/confirm_dialog.dart'; import 'package:mohem_flutter_app/widgets/dialogs/dialogs.dart'; @@ -21,6 +22,7 @@ import 'package:mohem_flutter_app/widgets/location/Location.dart'; import 'package:mohem_flutter_app/widgets/nfc/nfc_reader_sheet.dart'; import 'package:mohem_flutter_app/widgets/qr_scanner_dialog.dart'; import 'package:nfc_manager/nfc_manager.dart'; +import 'package:provider/provider.dart'; import 'package:wifi_iot/wifi_iot.dart'; class MarkAttendanceWidget extends StatefulWidget { @@ -75,75 +77,102 @@ class _MarkAttendanceWidgetState extends State { @override Widget build(BuildContext context) { - return Container( - padding: EdgeInsets.only(left: 21, right: 21, bottom: 21, top: widget.topPadding), - decoration: const BoxDecoration(borderRadius: BorderRadius.only(topLeft: Radius.circular(25), topRight: Radius.circular(25)), color: Colors.white), - width: double.infinity, - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - mainAxisSize: MainAxisSize.min, - children: [ - LocaleKeys.markAttendance.tr().toSectionHeading(), - LocaleKeys.selectMethodOfAttendance.tr().tr().toText11(color: const Color(0xff535353)), - GridView( - physics: const NeverScrollableScrollPhysics(), - shrinkWrap: true, - padding: const EdgeInsets.only(bottom: 0, top: 21), - gridDelegate: - SliverGridDelegateWithFixedCrossAxisCount(crossAxisCount: (MediaQuery.of(context).size.width < 550) ? 3 : 5, childAspectRatio: 1 / 1, crossAxisSpacing: 8, mainAxisSpacing: 8), - children: [ - // if (isNfcEnabled) - attendanceMethod("NFC", "assets/images/nfc.svg", isNfcEnabled, () { - if (isNfcLocationEnabled) { - Location.getCurrentLocation((LatLng? latlng, bool isMocked) { - if (isMocked) { - markFakeAttendance("NFC", latlng?.latitude.toString() ?? "", latlng?.longitude.toString() ?? ""); - } else { - performNfcAttendance(widget.model, lat: latlng?.latitude.toString() ?? "", lng: latlng?.longitude.toString() ?? ""); - } - }, context); - } else { - performNfcAttendance(widget.model); - } - }), - if (isWifiEnabled) - attendanceMethod("Wifi", "assets/images/wufu.svg", isWifiEnabled, () { - if (isWifiLocationEnabled) { - Location.getCurrentLocation((LatLng? latlng, bool isMocked) { - if (isMocked) { - markFakeAttendance("WIFI", latlng?.latitude.toString() ?? "", latlng?.longitude.toString() ?? ""); - } else { - performWifiAttendance(widget.model, lat: latlng?.latitude.toString() ?? "", lng: latlng?.longitude.toString() ?? ""); - } - }, context); - } else { - performWifiAttendance(widget.model); - } - // connectWifi(); - }), - if (isQrEnabled) - attendanceMethod("QR", "assets/images/ic_qr.svg", isQrEnabled, () async { - if (isQrLocationEnabled) { - Location.getCurrentLocation((LatLng? latlng, bool isMocked) { - if (isMocked) { - markFakeAttendance("QR", latlng?.latitude.toString() ?? "", latlng?.longitude.toString() ?? ""); - } else { - performQrCodeAttendance(widget.model, lat: latlng?.latitude.toString() ?? "", lng: latlng?.longitude.toString() ?? ""); - } - }, context); - } else { - performQrCodeAttendance(widget.model); - } - // performQrCodeAttendance(model); - }), - ], - ) - ], - ), - ); + return Consumer(builder: (_, HmgConnectionProvider provider, __) { + return Container( + decoration: BoxDecoration( + borderRadius: const BorderRadius.only(topLeft: Radius.circular(25), topRight: Radius.circular(25)), + color: provider.isConnectedToHMG ? MyColors.greenColor : MyColors.pinkDarkColor, + ), + width: double.infinity, + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Padding( + padding: const EdgeInsets.only(left: 25, right: 25, top: 10, bottom: 10), + child: (provider.isConnectedToHMG ? LocaleKeys.connectedWithHmg.tr() : LocaleKeys.networkMustHMG.tr()).toText12(color: Colors.white), + ), + Container( + padding: EdgeInsets.only(left: 21, right: 21, bottom: 21, top: widget.topPadding), + decoration: const BoxDecoration(borderRadius: BorderRadius.only(topLeft: Radius.circular(25), topRight: Radius.circular(25)), color: Colors.white), + width: double.infinity, + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisSize: MainAxisSize.min, + children: [ + LocaleKeys.markAttendance.tr().toSectionHeading(), + LocaleKeys.selectMethodOfAttendance.tr().tr().toText11(color: const Color(0xff535353)), + GridView( + physics: const NeverScrollableScrollPhysics(), + shrinkWrap: true, + padding: const EdgeInsets.only(bottom: 0, top: 21), + gridDelegate: + SliverGridDelegateWithFixedCrossAxisCount(crossAxisCount: (MediaQuery.of(context).size.width < 550) ? 3 : 5, childAspectRatio: 1 / 1, crossAxisSpacing: 8, mainAxisSpacing: 8), + children: [ + // if (isNfcEnabled) + attendanceMethod("NFC", "assets/images/nfc.svg", isNfcEnabled, provider.isConnectedToHMG, () async { + if (await provider.checkHmgNetworkConnectivity()) { + if (isNfcLocationEnabled) { + Location.getCurrentLocation((LatLng? latlng, bool isMocked) { + if (isMocked) { + markFakeAttendance("NFC", latlng?.latitude.toString() ?? "", latlng?.longitude.toString() ?? "",provider: provider); + } else { + performNfcAttendance(widget.model, lat: latlng?.latitude.toString() ?? "", lng: latlng?.longitude.toString() ?? "",provider: provider); + } + }, context); + } else { + performNfcAttendance(widget.model,provider: provider); + } + } else { + Utils.showToast("Please connect with the HMG internet to mark attendance"); + } + }), + if (isWifiEnabled) + attendanceMethod("Wifi", "assets/images/wufu.svg", isWifiEnabled, provider.isConnectedToHMG, () async { + if (await provider.checkHmgNetworkConnectivity()) { + if (isWifiLocationEnabled) { + Location.getCurrentLocation((LatLng? latlng, bool isMocked) { + if (isMocked) { + markFakeAttendance("WIFI", latlng?.latitude.toString() ?? "", latlng?.longitude.toString() ?? "",provider: provider); + } else { + performWifiAttendance(widget.model, lat: latlng?.latitude.toString() ?? "", lng: latlng?.longitude.toString() ?? "",provider: provider); + } + }, context); + } else { + performWifiAttendance(widget.model,provider: provider); + } + } else { + Utils.showToast("Please connect with the HMG internet to mark attendance"); + } + + // connectWifi(); + }), + if (isQrEnabled) + attendanceMethod("QR", "assets/images/ic_qr.svg", isQrEnabled, provider.isConnectedToHMG, () async { + if (isQrLocationEnabled) { + Location.getCurrentLocation((LatLng? latlng, bool isMocked) { + if (isMocked) { + markFakeAttendance("QR", latlng?.latitude.toString() ?? "", latlng?.longitude.toString() ?? "",provider: provider); + } else { + performQrCodeAttendance(widget.model, lat: latlng?.latitude.toString() ?? "", lng: latlng?.longitude.toString() ?? ""); + } + }, context); + } else { + performQrCodeAttendance(widget.model); + } + // performQrCodeAttendance(model); + }), + ], + ) + ], + ), + ), + ], + ), + ); + }); } - Future performNfcAttendance(DashboardProviderModel model, {String lat = "0", String lng = "0"}) async { + Future performNfcAttendance(DashboardProviderModel model, {String lat = "0", String lng = "0", required HmgConnectionProvider provider}) async { if (Platform.isIOS) { Utils.readNFc(onRead: (String nfcId) async { Utils.showLoading(context); @@ -170,6 +199,7 @@ class _MarkAttendanceWidgetState extends State { isDismissable: true, child: SuccessDialog(widget.isFromDashboard), ); + provider.closeWifiRequest(); } } catch (ex) { Utils.hideLoading(context); @@ -201,7 +231,9 @@ class _MarkAttendanceWidgetState extends State { isDismissable: false, child: SuccessDialog(widget.isFromDashboard), ); + provider.closeWifiRequest(); } + } catch (ex) { print(ex); Utils.hideLoading(context); @@ -226,40 +258,28 @@ class _MarkAttendanceWidgetState extends State { } } - Future performWifiAttendance(DashboardProviderModel model, {String lat = "0", String lng = "0"}) async { + Future performWifiAttendance(DashboardProviderModel model, {String lat = "0", String lng = "0", required HmgConnectionProvider provider}) async { if (Platform.isAndroid) { if (!(await checkSession())) { return; } } Utils.showLoading(context); - bool isConnected = await WiFiForIoTPlugin.connect(AppState().getMohemmWifiSSID ?? "", - password: AppState().getMohemmWifiPassword ?? "", joinOnce: Platform.isIOS ? false : true, security: NetworkSecurity.WPA, withInternet: false); - - if (Platform.isIOS) { - if (await WiFiForIoTPlugin.getSSID() == AppState().getMohemmWifiSSID) { - isConnected = true; - } else { - isConnected = false; - } - } - - if (isConnected && AppState().isAuthenticated) { - await WiFiForIoTPlugin.forceWifiUsage(true); + if (AppState().isAuthenticated) { await Future.delayed(const Duration(seconds: 6)); try { GenericResponseModel? g = await DashboardApiClient().markAttendance(pointType: 3, nfcValue: "", isGpsRequired: isWifiLocationEnabled, lat: lat, long: lng); bool status = await model.fetchAttendanceTracking(context); Utils.hideLoading(context); - await closeWifiRequest(); + showMDialog( context, backgroundColor: Colors.transparent, isDismissable: false, child: SuccessDialog(widget.isFromDashboard), ); + provider.closeWifiRequest(); } catch (ex) { - await closeWifiRequest(); Utils.hideLoading(context); Utils.handleException(ex, context, null); } @@ -268,7 +288,7 @@ class _MarkAttendanceWidgetState extends State { Utils.hideLoading(context); Utils.confirmDialog(context, LocaleKeys.comeNearHMGWifi.tr()); } else { - await closeWifiRequest(); + // await closeWifiRequest(); } } } @@ -306,7 +326,7 @@ class _MarkAttendanceWidgetState extends State { } } - void markFakeAttendance(String sourceName, String lat, String long) async { + void markFakeAttendance(String sourceName, String lat, String long, {required HmgConnectionProvider provider}) async { Utils.showLoading(context); try { await DashboardApiClient().markFakeLocation(sourceName: sourceName, lat: lat, long: long); @@ -319,11 +339,11 @@ class _MarkAttendanceWidgetState extends State { } } - Widget attendanceMethod(String title, String image, bool isEnabled, VoidCallback onPress) => Container( + Widget attendanceMethod(String title, String image, bool isEnabled, bool isHmgNetworkAvailable, VoidCallback onPress) => Container( decoration: BoxDecoration( borderRadius: BorderRadius.circular(15), - color: isEnabled ? null : Colors.grey.withOpacity(.5), - gradient: isEnabled + color: isHmgNetworkAvailable && isEnabled ? null : Colors.grey.withOpacity(.5), + gradient: isHmgNetworkAvailable && isEnabled ? const LinearGradient( transform: GradientRotation(.64), begin: Alignment.topRight,