Compare commits

...

4 Commits

Author SHA1 Message Date
mirza.shafique 69a47173cf QR attendance 2 years ago
mirza.shafique ab68388504 Merge branch 'master' into mirza_hmg_wifi_phase_1
# Conflicts:
#	assets/langs/ar-SA.json
#	assets/langs/en-US.json
#	lib/generated/codegen_loader.g.dart
#	lib/generated/locale_keys.g.dart
#	lib/ui/login/login_screen.dart
#	lib/widgets/mark_attendance_widget.dart
3 years ago
mirza.shafique 62c3c47fe9 hmg wifi implementation 1.0 3 years ago
mirza.shafique f4100a138d Merge branch 'master' into mirza_hmg_wifi_phase_1 3 years ago

@ -22,6 +22,7 @@
android:icon="@mipmap/ic_launcher" android:icon="@mipmap/ic_launcher"
android:label="Mohemm" android:label="Mohemm"
android:extractNativeLibs="true" android:extractNativeLibs="true"
android:usesCleartextTraffic="true"
android:networkSecurityConfig="@xml/network_security_config" android:networkSecurityConfig="@xml/network_security_config"
android:roundIcon="@mipmap/ic_launcher_round"> android:roundIcon="@mipmap/ic_launcher_round">
<activity <activity

@ -530,5 +530,7 @@
"connectHmgWifi": "قم بتوصيل HMG WIFI", "connectHmgWifi": "قم بتوصيل HMG WIFI",
"connectedHmgWifi": "اتصال HMG WIFI", "connectedHmgWifi": "اتصال HMG WIFI",
"itgForms": "نماذج (ITG)", "itgForms": "نماذج (ITG)",
"resetAdPassword": "إعادة تعيين كلمة مرور AD" "resetAdPassword": "إعادة تعيين كلمة مرور AD",
"connectedWithHmg": "Connected With HMG",
"networkMustHMG": "Network Must be HMG"
} }

@ -530,5 +530,7 @@
"connectHmgWifi": "Connect HMG WIFI", "connectHmgWifi": "Connect HMG WIFI",
"connectedHmgWifi": "Connected HMG WIFI", "connectedHmgWifi": "Connected HMG WIFI",
"itgForms": "ITG Forms", "itgForms": "ITG Forms",
"resetAdPassword": "Reset AD Password" "resetAdPassword": "Reset AD Password",
"connectedWithHmg": "Connected With HMG",
"networkMustHMG": "Network Must be HMG"
} }

@ -215,4 +215,19 @@ class DashboardApiClient {
return json; return json;
}, url, postParams); }, url, postParams);
} }
//Mark Fake Location
Future<GenericResponseModel?> checkLocelIP(String qrValue) async {
String url = "http://10.201.214.101:80/Services/SWP.svc/REST/CheckWifiCall";
Map<String, dynamic> postParams = {
"EmployeeID": AppState().memberInformationList!.eMPLOYEENUMBER,
"QRValue": qrValue,
};
postParams.addAll(AppState().postParamsJson);
return await ApiClient().postJsonForObject((json) {
GenericResponseModel responseData = GenericResponseModel.fromJson(json);
return responseData;
}, url, postParams);
}
} }

@ -13,6 +13,7 @@ import 'package:mohem_flutter_app/provider/chat_call_provider.dart';
import 'package:mohem_flutter_app/provider/chat_provider_model.dart'; import 'package:mohem_flutter_app/provider/chat_provider_model.dart';
import 'package:mohem_flutter_app/provider/dashboard_provider_model.dart'; import 'package:mohem_flutter_app/provider/dashboard_provider_model.dart';
import 'package:mohem_flutter_app/provider/eit_provider_model.dart'; import 'package:mohem_flutter_app/provider/eit_provider_model.dart';
import 'package:mohem_flutter_app/provider/hmg_connection_provider.dart';
import 'package:mohem_flutter_app/theme/app_theme.dart'; import 'package:mohem_flutter_app/theme/app_theme.dart';
import 'package:mohem_flutter_app/ui/marathon/marathon_provider.dart'; import 'package:mohem_flutter_app/ui/marathon/marathon_provider.dart';
import 'package:month_year_picker/month_year_picker.dart'; import 'package:month_year_picker/month_year_picker.dart';
@ -20,6 +21,8 @@ import 'package:provider/provider.dart';
import 'package:provider/single_child_widget.dart'; import 'package:provider/single_child_widget.dart';
import 'package:sizer/sizer.dart'; import 'package:sizer/sizer.dart';
Logger logger = Logger( Logger logger = Logger(
// filter: null, // Use the default LogFilter (-> only log in debug mode) // filter: null, // Use the default LogFilter (-> only log in debug mode)
printer: PrettyPrinter( printer: PrettyPrinter(
@ -73,6 +76,9 @@ Future<void> main() async {
// ChangeNotifierProvider<ChatCallProvider>( // ChangeNotifierProvider<ChatCallProvider>(
// create: (_) => ChatCallProvider(), // create: (_) => ChatCallProvider(),
// ), // ),
ChangeNotifierProvider<HmgConnectionProvider>(
create: (_) => HmgConnectionProvider(),
),
], ],
child: const MyApp(), child: const MyApp(),
), ),

@ -13,25 +13,31 @@ class HmgConnectionProvider extends ChangeNotifier {
} else { } else {
isConnectedToHMG = false; isConnectedToHMG = false;
} }
AppState().isConnectedToHMG = isConnectedToHMG; notify();
return isConnectedToHMG; return isConnectedToHMG;
} }
void connectWithHmgNetwork() async { Future<bool> connectWithHmgNetwork() async {
try { try {
bool isConnected = await WiFiForIoTPlugin.connect("MOHEMM-CONNECT", password: "0987654321", joinOnce: Platform.isIOS ? false : true, security: NetworkSecurity.WPA, withInternet: false); // 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("HMG-MOHEMM", password: "M0hemm@1212", joinOnce: Platform.isIOS ? false : true, security: NetworkSecurity.WPA, withInternet: false);
if (isConnected) { if (isConnected) {
await WiFiForIoTPlugin.forceWifiUsage(true); await WiFiForIoTPlugin.forceWifiUsage(true);
await Future.delayed(const Duration(seconds: 2)); await Future.delayed(const Duration(seconds: 2));
isConnectedToHMG=true; isConnectedToHMG = true;
notify();
} }
return isConnectedToHMG;
} catch (e) { } catch (e) {
isConnectedToHMG = false; isConnectedToHMG = false;
AppState().isConnectedToHMG = isConnectedToHMG; notify();
print("----------------o----"); print("----------------o----");
print(e); print(e);
return isConnectedToHMG;
} }
} }
@ -39,8 +45,17 @@ class HmgConnectionProvider extends ChangeNotifier {
if (Platform.isAndroid) { if (Platform.isAndroid) {
await WiFiForIoTPlugin.forceWifiUsage(false); await WiFiForIoTPlugin.forceWifiUsage(false);
} }
isConnectedToHMG = false;
bool isDone = await WiFiForIoTPlugin.disconnect();
if (isDone) {
isConnectedToHMG = false;
notify();
}
return isDone;
}
void notify() {
AppState().isConnectedToHMG = isConnectedToHMG; AppState().isConnectedToHMG = isConnectedToHMG;
return await WiFiForIoTPlugin.disconnect(); notifyListeners();
} }
} }

@ -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/marathon_provider.dart';
import 'package:mohem_flutter_app/ui/marathon/widgets/marathon_banner.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/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/mark_attendance_widget.dart';
import 'package:mohem_flutter_app/widgets/shimmer/dashboard_shimmer_widget.dart'; import 'package:mohem_flutter_app/widgets/shimmer/dashboard_shimmer_widget.dart';
import 'package:mohem_flutter_app/widgets/shimmer/offers_shimmer_widget.dart'; import 'package:mohem_flutter_app/widgets/shimmer/offers_shimmer_widget.dart';
@ -357,7 +358,15 @@ class _DashboardScreenState extends State<DashboardScreen> with WidgetsBindingOb
showMyBottomSheet( showMyBottomSheet(
context, context,
callBackFunc: () {}, callBackFunc: () {},
child: MarkAttendanceWidget(model, isFromDashboard: true), child: Column(
children: [
const Padding(
padding: EdgeInsets.all(8.0),
child: HmgConnectivityButton(),
),
MarkAttendanceWidget(model, isFromDashboard: true),
],
),
); );
}), }),
], ],

@ -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/extensions/widget_extensions.dart';
import 'package:mohem_flutter_app/generated/locale_keys.g.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/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/circular_step_progress_bar.dart';
import 'package:mohem_flutter_app/widgets/mark_attendance_widget.dart'; import 'package:mohem_flutter_app/widgets/mark_attendance_widget.dart';
import 'package:nfc_manager/nfc_manager.dart'; import 'package:nfc_manager/nfc_manager.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
import 'package:sizer/sizer.dart';
import 'package:wifi_iot/wifi_iot.dart'; import 'package:wifi_iot/wifi_iot.dart';
class TodayAttendanceScreen2 extends StatefulWidget { class TodayAttendanceScreen2 extends StatefulWidget {
@ -50,17 +52,19 @@ class _TodayAttendanceScreenState extends State<TodayAttendanceScreen2> {
icon: const Icon(Icons.arrow_back_ios, color: Colors.white), icon: const Icon(Icons.arrow_back_ios, color: Colors.white),
onPressed: () => Navigator.pop(context), onPressed: () => Navigator.pop(context),
), ),
// actions: [ actions: [
// IconButton( // IconButton(
// onPressed: () { // onPressed: () {
// data.fetchAttendanceTracking(context); // data.fetchAttendanceTracking(context);
// }, // },
// icon: const Icon( // icon: const Icon(
// Icons.ac_unit, // Icons.ac_unit,
// color: Colors.white, // color: Colors.white,
// ), // ),
// ) // )
// ], HmgConnectivityButton(),
12.width,
],
), ),
backgroundColor: MyColors.backgroundBlackColor, backgroundColor: MyColors.backgroundBlackColor,
body: Consumer<DashboardProviderModel>( body: Consumer<DashboardProviderModel>(
@ -69,6 +73,7 @@ class _TodayAttendanceScreenState extends State<TodayAttendanceScreen2> {
? const Center(child: CircularProgressIndicator()) ? const Center(child: CircularProgressIndicator())
: Column( : Column(
children: [ children: [
8.height,
Container( Container(
width: double.infinity, width: double.infinity,
color: MyColors.backgroundBlackColor, color: MyColors.backgroundBlackColor,

@ -195,8 +195,8 @@ class _LoginScreenState extends State<LoginScreen> {
isAppOpenBySystem = (ModalRoute.of(context)!.settings.arguments ?? true) as bool; isAppOpenBySystem = (ModalRoute.of(context)!.settings.arguments ?? true) as bool;
if (!kReleaseMode) { if (!kReleaseMode) {
// username.text = "15444"; // Maha User // username.text = "15444"; // Maha User
// username.text = "15153"; // Tamer User username.text = "15153"; // Tamer User
// password.text = "Abcd@12345"; password.text = "tata@1234";
// username.text = "206535"; // Hashim User // username.text = "206535"; // Hashim User
// password.text = "Namira786"; // password.text = "Namira786";

@ -1,50 +1,115 @@
import 'package:easy_localization/easy_localization.dart'; import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:mohem_flutter_app/classes/colors.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/int_extensions.dart';
import 'package:mohem_flutter_app/extensions/string_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/generated/locale_keys.g.dart';
import 'package:mohem_flutter_app/provider/hmg_connection_provider.dart'; import 'package:mohem_flutter_app/provider/hmg_connection_provider.dart';
import 'package:provider/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<HmgConnectivityButton> createState() => _HmgConnectivityButtonState();
}
class _HmgConnectivityButtonState extends State<HmgConnectivityButton> with SingleTickerProviderStateMixin {
late Animation<Color?> 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 @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
Provider.of<HmgConnectionProvider>(context, listen: false).checkHmgNetworkConnectivity(); // Provider.of<HmgConnectionProvider>(context, listen: false).checkHmgNetworkConnectivity();
return Consumer<HmgConnectionProvider>( return Row(
builder: (_, HmgConnectionProvider foo, __) { children: [
return Container( Consumer<HmgConnectionProvider>(
height: 45, builder: (_, HmgConnectionProvider provider, __) {
padding: const EdgeInsets.only(left: 12, right: 12), return AnimatedBuilder(
decoration: BoxDecoration( animation: animation,
borderRadius: BorderRadius.circular(200.0), builder: (BuildContext context, Widget? child) {
gradient: const LinearGradient( return Container(
transform: GradientRotation(.83), height: 45,
begin: Alignment.topRight, decoration: BoxDecoration(
end: Alignment.bottomLeft, borderRadius: BorderRadius.circular(200.0),
colors: <Color>[ gradient: const LinearGradient(
MyColors.gradiantEndColor, transform: GradientRotation(.83),
MyColors.gradiantStartColor, begin: Alignment.topRight,
], end: Alignment.bottomLeft,
), colors: <Color>[
), MyColors.gradiantEndColor,
child: InkWell( MyColors.gradiantStartColor,
onTap: (){ ],
),
}, ),
child: Row( child: Container(
children: [ padding: const EdgeInsets.only(left: 12, right: 12),
const Icon( decoration: BoxDecoration(
Icons.wifi, borderRadius: BorderRadius.circular(200.0),
color: Colors.white, color: animation.value,
), ),
12.width, child: InkWell(
LocaleKeys.connectHmgWifi.tr().toText18(color: Colors.white), 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();
}
} }

@ -4,10 +4,8 @@ import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_svg/flutter_svg.dart'; import 'package:flutter_svg/flutter_svg.dart';
import 'package:geolocator/geolocator.dart'; import 'package:geolocator/geolocator.dart';
import 'package:huawei_location/location/fused_location_provider_client.dart';
import 'package:huawei_location/location/location_request.dart'; // import 'package:google_maps_flutter/google_maps_flutter.dart';
import 'package:huawei_location/location/location_settings_request.dart';
import 'package:huawei_location/permission/permission_handler.dart';
import 'package:mohem_flutter_app/api/dashboard_api_client.dart'; import 'package:mohem_flutter_app/api/dashboard_api_client.dart';
import 'package:mohem_flutter_app/app_state/app_state.dart'; import 'package:mohem_flutter_app/app_state/app_state.dart';
import 'package:mohem_flutter_app/classes/colors.dart'; import 'package:mohem_flutter_app/classes/colors.dart';
@ -18,6 +16,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/generic_response_model.dart';
import 'package:mohem_flutter_app/models/privilege_list_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/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/ui/dialogs/success_dialog.dart';
import 'package:mohem_flutter_app/widgets/dialogs/confirm_dialog.dart'; import 'package:mohem_flutter_app/widgets/dialogs/confirm_dialog.dart';
import 'package:mohem_flutter_app/widgets/dialogs/dialogs.dart'; import 'package:mohem_flutter_app/widgets/dialogs/dialogs.dart';
@ -25,8 +24,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/nfc/nfc_reader_sheet.dart';
import 'package:mohem_flutter_app/widgets/qr_scanner_dialog.dart'; import 'package:mohem_flutter_app/widgets/qr_scanner_dialog.dart';
import 'package:nfc_manager/nfc_manager.dart'; import 'package:nfc_manager/nfc_manager.dart';
import 'package:permission_handler/permission_handler.dart'; import 'package:provider/provider.dart';
import 'package:platform_device_id/platform_device_id.dart';
import 'package:wifi_iot/wifi_iot.dart'; import 'package:wifi_iot/wifi_iot.dart';
class MarkAttendanceWidget extends StatefulWidget { class MarkAttendanceWidget extends StatefulWidget {
@ -45,8 +43,6 @@ class MarkAttendanceWidget extends StatefulWidget {
class _MarkAttendanceWidgetState extends State<MarkAttendanceWidget> { class _MarkAttendanceWidgetState extends State<MarkAttendanceWidget> {
bool isNfcEnabled = false, isNfcLocationEnabled = false, isQrEnabled = false, isQrLocationEnabled = false, isWifiEnabled = false, isWifiLocationEnabled = false; bool isNfcEnabled = false, isNfcLocationEnabled = false, isQrEnabled = false, isQrLocationEnabled = false, isWifiEnabled = false, isWifiLocationEnabled = false;
int _locationUpdateCbId = 0;
@override @override
void initState() { void initState() {
super.initState(); super.initState();
@ -54,8 +50,6 @@ class _MarkAttendanceWidgetState extends State<MarkAttendanceWidget> {
} }
void checkAttendanceAvailability() async { void checkAttendanceAvailability() async {
String? deviceID = await PlatformDeviceId.getDeviceId;
print("Platform Device ID: $deviceID");
bool isAvailable = await NfcManager.instance.isAvailable(); bool isAvailable = await NfcManager.instance.isAvailable();
setState(() { setState(() {
AppState().privilegeListModel!.forEach((PrivilegeListModel element) { AppState().privilegeListModel!.forEach((PrivilegeListModel element) {
@ -76,36 +70,6 @@ class _MarkAttendanceWidgetState extends State<MarkAttendanceWidget> {
}); });
} }
void checkHuaweiLocationPermission(String attendanceType) async {
PermissionHandler permissionHandler = PermissionHandler();
if (await permissionHandler.hasLocationPermission()) {
getHuaweiCurrentLocation(attendanceType);
} else {
bool has = await requestPermissions();
if (has) {
getHuaweiCurrentLocation(attendanceType);
} else {
showDialog(
context: context,
builder: (BuildContext cxt) => ConfirmDialog(
message: "You need to give location permission to mark attendance",
onTap: () {
Navigator.pop(context);
},
),
);
}
}
}
Future<bool> requestPermissions() async {
var result = await [
Permission.location,
].request();
return (result[Permission.location] == PermissionStatus.granted || result[Permission.locationAlways] == PermissionStatus.granted);
}
@override @override
void dispose() { void dispose() {
super.dispose(); super.dispose();
@ -115,135 +79,103 @@ class _MarkAttendanceWidgetState extends State<MarkAttendanceWidget> {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Container( return Consumer<HmgConnectionProvider>(builder: (_, HmgConnectionProvider provider, __) {
padding: EdgeInsets.only(left: 21, right: 21, bottom: 21, top: widget.topPadding), return Container(
decoration: const BoxDecoration(borderRadius: BorderRadius.only(topLeft: Radius.circular(25), topRight: Radius.circular(25)), color: Colors.white), decoration: BoxDecoration(
width: double.infinity, borderRadius: const BorderRadius.only(topLeft: Radius.circular(25), topRight: Radius.circular(25)),
child: Column( color: provider.isConnectedToHMG ? MyColors.greenColor : MyColors.pinkDarkColor,
crossAxisAlignment: CrossAxisAlignment.start, ),
mainAxisSize: MainAxisSize.min, width: double.infinity,
children: [ child: Column(
LocaleKeys.markAttendance.tr().toSectionHeading(), crossAxisAlignment: CrossAxisAlignment.start,
LocaleKeys.selectMethodOfAttendance.tr().tr().toText11(color: const Color(0xff535353)), children: [
GridView( Padding(
physics: const NeverScrollableScrollPhysics(), padding: const EdgeInsets.only(left: 25, right: 25, top: 10, bottom: 10),
shrinkWrap: true, // child: (provider.isConnectedToHMG ? LocaleKeys.connectedWithHmg.tr() : LocaleKeys.networkMustHMG.tr()).toText12(color: Colors.white),
padding: const EdgeInsets.only(bottom: 0, top: 21), child: (provider.isConnectedToHMG ? "Connected With HMG" : "Network Must be HMG").toText12(color: Colors.white),
gridDelegate: ),
SliverGridDelegateWithFixedCrossAxisCount(crossAxisCount: (MediaQuery.of(context).size.width < 550) ? 3 : 5, childAspectRatio: 1 / 1, crossAxisSpacing: 8, mainAxisSpacing: 8), Container(
children: <Widget>[ padding: EdgeInsets.only(left: 21, right: 21, bottom: 21, top: widget.topPadding),
// if (isNfcEnabled) decoration: const BoxDecoration(borderRadius: BorderRadius.only(topLeft: Radius.circular(25), topRight: Radius.circular(25)), color: Colors.white),
attendanceMethod("NFC", "assets/images/nfc.svg", isNfcEnabled, () { width: double.infinity,
// if (isNfcLocationEnabled) { child: Column(
if (AppState().getIsHuawei) { crossAxisAlignment: CrossAxisAlignment.start,
checkHuaweiLocationPermission("NFC"); mainAxisSize: MainAxisSize.min,
} else { children: [
Location.getCurrentLocation((Position position, bool isMocked) { LocaleKeys.markAttendance.tr().toSectionHeading(),
if (isMocked) { LocaleKeys.selectMethodOfAttendance.tr().tr().toText11(color: const Color(0xff535353)),
markFakeAttendance("NFC", position.latitude.toString() ?? "", position.longitude.toString() ?? ""); GridView(
} else { physics: const NeverScrollableScrollPhysics(),
performNfcAttendance(widget.model, lat: position.latitude.toString() ?? "", lng: position.longitude.toString() ?? ""); shrinkWrap: true,
} padding: const EdgeInsets.only(bottom: 0, top: 21),
}, context); gridDelegate:
} SliverGridDelegateWithFixedCrossAxisCount(crossAxisCount: (MediaQuery.of(context).size.width < 550) ? 3 : 5, childAspectRatio: 1 / 1, crossAxisSpacing: 8, mainAxisSpacing: 8),
// } else { children: <Widget>[
// performNfcAttendance(widget.model); // if (isNfcEnabled)
// } attendanceMethod("NFC", "assets/images/nfc.svg", isNfcEnabled, provider.isConnectedToHMG, () async {
}), if (await provider.checkHmgNetworkConnectivity()) {
if (isWifiEnabled) if (isNfcLocationEnabled) {
attendanceMethod("Wifi", "assets/images/wufu.svg", isWifiEnabled, () { Location.getCurrentLocation((Position? latlng, bool isMocked) {
// if (isWifiLocationEnabled) { if (isMocked) {
if (AppState().getIsHuawei) { markFakeAttendance("NFC", latlng?.latitude.toString() ?? "", latlng?.longitude.toString() ?? "", provider: provider);
checkHuaweiLocationPermission("WIFI"); } else {
} else { performNfcAttendance(widget.model, lat: latlng?.latitude.toString() ?? "", lng: latlng?.longitude.toString() ?? "", provider: provider);
Location.getCurrentLocation((Position position, bool isMocked) { }
if (isMocked) { }, context);
markFakeAttendance("WIFI", position.latitude.toString() ?? "", position.longitude.toString() ?? ""); } else {
} else { performNfcAttendance(widget.model, provider: provider);
performWifiAttendance(widget.model, lat: position.latitude.toString() ?? "", lng: position.longitude.toString() ?? ""); }
}
}, context);
}
// } else {
// performWifiAttendance(widget.model);
// }
}),
if (isQrEnabled)
attendanceMethod("QR", "assets/images/ic_qr.svg", isQrEnabled, () async {
// if (isQrLocationEnabled) {
if (AppState().getIsHuawei) {
checkHuaweiLocationPermission("QR");
} else {
Location.getCurrentLocation((Position position, bool isMocked) {
if (isMocked) {
markFakeAttendance("QR", position.latitude.toString() ?? "", position.longitude.toString() ?? "");
} else { } else {
performQrCodeAttendance(widget.model, lat: position.latitude.toString() ?? "", lng: position.longitude.toString() ?? ""); Utils.showToast("Please connect with the HMG internet to mark attendance");
} }
}, context); }),
} if (isWifiEnabled)
// } else { attendanceMethod("Wifi", "assets/images/wufu.svg", isWifiEnabled, provider.isConnectedToHMG, () async {
// performQrCodeAttendance(widget.model); if (await provider.checkHmgNetworkConnectivity()) {
// } if (isWifiLocationEnabled) {
// performQrCodeAttendance(model); Location.getCurrentLocation((Position? 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");
}
void getHuaweiCurrentLocation(String attendanceType) { // connectWifi();
try { }),
FusedLocationProviderClient locationService = FusedLocationProviderClient(); if (isQrEnabled)
LocationRequest locationRequest = LocationRequest(); attendanceMethod("QR", "assets/images/ic_qr.svg", isQrEnabled, provider.isConnectedToHMG, () async {
locationRequest.priority = LocationRequest.PRIORITY_BALANCED_POWER_ACCURACY; // if (isQrLocationEnabled) {
locationRequest.interval = 1000; // Location.getCurrentLocation((Position? latlng, bool isMocked) {
List<LocationRequest> locationRequestList = <LocationRequest>[locationRequest]; // if (isMocked) {
LocationSettingsRequest locationSettingsRequest = LocationSettingsRequest(requests: locationRequestList); // markFakeAttendance("QR", latlng?.latitude.toString() ?? "", latlng?.longitude.toString() ?? "", provider: provider);
// } else {
locationService.checkLocationSettings(locationSettingsRequest).then((settings) async { // performQrCodeAttendance(widget.model, lat: latlng?.latitude.toString() ?? "", lng: latlng?.longitude.toString() ?? "");
await locationService.getLastLocation().then((value) { // }
if (value.latitude == null || value.longitude == null) { // }, context);
showDialog( // } else {
context: context, // performQrCodeAttendance(widget.model);
builder: (BuildContext cxt) => ConfirmDialog( // }
message: "Unable to get your location, Please check your location settings & try again.", performQrCodeAttendance(widget.model);
onTap: () { }),
Navigator.pop(context); ],
}, )
],
), ),
); ),
} else { ],
if (attendanceType == "QR") { ),
performQrCodeAttendance(widget.model, lat: value.latitude.toString() ?? "", lng: value.longitude.toString() ?? ""); );
} });
if (attendanceType == "WIFI") {
performWifiAttendance(widget.model, lat: value.latitude.toString() ?? "", lng: value.longitude.toString() ?? "");
}
if (attendanceType == "NFC") {
performNfcAttendance(widget.model, lat: value.latitude.toString() ?? "", lng: value.longitude.toString() ?? "");
}
}
}).catchError((error) {
print("HUAWEI LOCATION getLastLocation ERROR!!!!!");
print(error);
});
}).catchError((error) {
print("HUAWEI LOCATION checkLocationSettings ERROR!!!!!");
print(error);
if (error.code == "LOCATION_SETTINGS_NOT_AVAILABLE") {
// Location service not enabled.
}
});
} catch (error) {
print("HUAWEI LOCATION ERROR!!!!!");
print(error);
}
} }
Future<void> performNfcAttendance(DashboardProviderModel model, {String lat = "0", String lng = "0"}) async { Future<void> performNfcAttendance(DashboardProviderModel model, {String lat = "0", String lng = "0", required HmgConnectionProvider provider}) async {
if (Platform.isIOS) { if (Platform.isIOS) {
Utils.readNFc(onRead: (String nfcId) async { Utils.readNFc(onRead: (String nfcId) async {
Utils.showLoading(context); Utils.showLoading(context);
@ -270,6 +202,7 @@ class _MarkAttendanceWidgetState extends State<MarkAttendanceWidget> {
isDismissable: true, isDismissable: true,
child: SuccessDialog(widget.isFromDashboard), child: SuccessDialog(widget.isFromDashboard),
); );
provider.closeWifiRequest();
} }
} catch (ex) { } catch (ex) {
Utils.hideLoading(context); Utils.hideLoading(context);
@ -301,6 +234,7 @@ class _MarkAttendanceWidgetState extends State<MarkAttendanceWidget> {
isDismissable: false, isDismissable: false,
child: SuccessDialog(widget.isFromDashboard), child: SuccessDialog(widget.isFromDashboard),
); );
provider.closeWifiRequest();
} }
} catch (ex) { } catch (ex) {
print(ex); print(ex);
@ -326,54 +260,28 @@ class _MarkAttendanceWidgetState extends State<MarkAttendanceWidget> {
} }
} }
Future<void> performWifiAttendance(DashboardProviderModel model, {String lat = "0", String lng = "0"}) async { Future<void> performWifiAttendance(DashboardProviderModel model, {String lat = "0", String lng = "0", required HmgConnectionProvider provider}) async {
if (Platform.isAndroid) { if (Platform.isAndroid) {
if (!(await checkSession())) { if (!(await checkSession())) {
return; return;
} }
} }
Utils.showLoading(context); Utils.showLoading(context);
bool isConnected = await WiFiForIoTPlugin.connect(AppState().getMohemmWifiSSID ?? "", if (AppState().isAuthenticated) {
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);
await Future.delayed(const Duration(seconds: 6)); await Future.delayed(const Duration(seconds: 6));
try { try {
GenericResponseModel? g = await DashboardApiClient().markAttendance(pointType: 3, nfcValue: "", isGpsRequired: isWifiLocationEnabled, lat: lat, long: lng); GenericResponseModel? g = await DashboardApiClient().markAttendance(pointType: 3, nfcValue: "", isGpsRequired: isWifiLocationEnabled, lat: lat, long: lng);
bool status = await model.fetchAttendanceTracking(context); bool status = await model.fetchAttendanceTracking(context);
Utils.hideLoading(context); Utils.hideLoading(context);
await closeWifiRequest();
if (g?.messageStatus == 2) { showMDialog(
showDialog( context,
barrierDismissible: true, backgroundColor: Colors.transparent,
context: context, isDismissable: false,
builder: (cxt) => ConfirmDialog( child: SuccessDialog(widget.isFromDashboard),
message: g?.errorEndUserMessage ?? "", );
onTap: () { provider.closeWifiRequest();
Navigator.pop(context);
},
onCloseTap: () {},
),
);
} else {
showMDialog(
context,
backgroundColor: Colors.transparent,
isDismissable: false,
child: SuccessDialog(widget.isFromDashboard),
);
}
} catch (ex) { } catch (ex) {
await closeWifiRequest();
Utils.hideLoading(context); Utils.hideLoading(context);
Utils.handleException(ex, context, null); Utils.handleException(ex, context, null);
} }
@ -382,7 +290,7 @@ class _MarkAttendanceWidgetState extends State<MarkAttendanceWidget> {
Utils.hideLoading(context); Utils.hideLoading(context);
Utils.confirmDialog(context, LocaleKeys.comeNearHMGWifi.tr()); Utils.confirmDialog(context, LocaleKeys.comeNearHMGWifi.tr());
} else { } else {
await closeWifiRequest(); // await closeWifiRequest();
} }
} }
} }
@ -401,40 +309,43 @@ class _MarkAttendanceWidgetState extends State<MarkAttendanceWidget> {
), ),
); );
if (qrCodeValue != null) { if (qrCodeValue != null) {
Utils.showLoading(context); print("-----------f---");
try { print(qrCodeValue);
GenericResponseModel? g = await DashboardApiClient().markAttendance(pointType: 1, isGpsRequired: isQrLocationEnabled, lat: lat, long: lng, QRValue: qrCodeValue); Utils.showToast(qrCodeValue);
bool status = await model.fetchAttendanceTracking(context); // Utils.showLoading(context);
Utils.hideLoading(context); checkLocalIP(qrCodeValue);
if (g?.messageStatus == 2) { // try {
showDialog( // GenericResponseModel? g = await DashboardApiClient().markAttendance(pointType: 1, isGpsRequired: isQrLocationEnabled, lat: lat, long: lng, QRValue: qrCodeValue);
barrierDismissible: true, // bool status = await model.fetchAttendanceTracking(context);
context: context, // Utils.hideLoading(context);
builder: (cxt) => ConfirmDialog( // showMDialog(
message: g?.errorEndUserMessage ?? "", // context,
onTap: () { // backgroundColor: Colors.transparent,
Navigator.pop(context); // isDismissable: true,
}, // child: SuccessDialog(widget.isFromDashboard),
onCloseTap: () {}, // );
), // } catch (ex) {
); // print(ex);
} else { // Utils.hideLoading(context);
showMDialog( // Utils.handleException(ex, context, null);
context, // }
backgroundColor: Colors.transparent, }
isDismissable: true, }
child: SuccessDialog(widget.isFromDashboard),
); void checkLocalIP(String qrValue) async {
} Utils.showLoading(context);
} catch (ex) { try {
print(ex); await DashboardApiClient().checkLocelIP(qrValue);
Utils.hideLoading(context); Utils.hideLoading(context);
Utils.handleException(ex, context, null); Utils.confirmDialog(context, "Local Ip called");
} } catch (ex) {
print(ex);
Utils.hideLoading(context);
Utils.handleException(ex, context, null);
} }
} }
void markFakeAttendance(String sourceName, String lat, String long) async { void markFakeAttendance(String sourceName, String lat, String long, {required HmgConnectionProvider provider}) async {
Utils.showLoading(context); Utils.showLoading(context);
try { try {
await DashboardApiClient().markFakeLocation(sourceName: sourceName, lat: lat, long: long); await DashboardApiClient().markFakeLocation(sourceName: sourceName, lat: lat, long: long);
@ -447,11 +358,11 @@ class _MarkAttendanceWidgetState extends State<MarkAttendanceWidget> {
} }
} }
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( decoration: BoxDecoration(
borderRadius: BorderRadius.circular(15), borderRadius: BorderRadius.circular(15),
color: isEnabled ? null : Colors.grey.withOpacity(.5), color: isHmgNetworkAvailable && isEnabled ? null : Colors.grey.withOpacity(.5),
gradient: isEnabled gradient: isHmgNetworkAvailable && isEnabled
? const LinearGradient( ? const LinearGradient(
transform: GradientRotation(.64), transform: GradientRotation(.64),
begin: Alignment.topRight, begin: Alignment.topRight,

@ -46,7 +46,7 @@ dependencies:
local_auth: ^1.1.9 local_auth: ^1.1.9
fluttertoast: ^8.0.8 fluttertoast: ^8.0.8
syncfusion_flutter_calendar: ^19.4.48 syncfusion_flutter_calendar: ^19.4.48
# flutter_calendar_carousel: ^2.1.0 # flutter_calendar_carousel: ^2.1.0
pie_chart: ^5.1.0 pie_chart: ^5.1.0
shared_preferences: ^2.0.12 shared_preferences: ^2.0.12
firebase_messaging: ^13.0.4 firebase_messaging: ^13.0.4
@ -54,9 +54,9 @@ dependencies:
logger: ^1.1.0 logger: ^1.1.0
flutter_countdown_timer: ^4.1.0 flutter_countdown_timer: ^4.1.0
nfc_manager: ^3.2.0 nfc_manager: ^3.2.0
# uuid: ^3.0.6 # uuid: ^3.0.6
# device_info_plus: ^4.0.0 # device_info_plus: ^4.0.0
# android_id: ^0.1.3+1 # android_id: ^0.1.3+1
platform_device_id: ^1.0.1 platform_device_id: ^1.0.1
image_picker: ^0.8.5+3 image_picker: ^0.8.5+3
file_picker: ^4.6.1 file_picker: ^4.6.1
@ -66,21 +66,22 @@ dependencies:
open_file: ^3.2.1 open_file: ^3.2.1
wifi_iot: ^0.3.18 wifi_iot: ^0.3.18
flutter_html: ^3.0.0-alpha.6 flutter_html: ^3.0.0-alpha.6
# flutter_barcode_scanner: ^2.0.0 # flutter_barcode_scanner: ^2.0.0
qr_code_scanner: ^1.0.1 qr_code_scanner: ^1.0.1
# qr_flutter: ^4.0.0 # qr_flutter: ^4.0.0
url_launcher: ^6.0.15 url_launcher: ^6.0.15
share: 2.0.4 share: 2.0.4
flutter_rating_bar: ^4.0.1 flutter_rating_bar: ^4.0.1
auto_size_text: ^3.0.0 auto_size_text: ^3.0.0
pull_to_refresh: ^2.0.0 pull_to_refresh: ^2.0.0
# lottie json animations # lottie json animations
file: ^6.1.4
lottie: any lottie: any
# Marathon Card Swipe # Marathon Card Swipe
appinio_swiper: ^1.1.1 appinio_swiper: ^1.1.1
expandable: ^5.0.1 expandable: ^5.0.1
# networkImage # networkImage
cached_network_image: ^3.2.2 cached_network_image: ^3.2.2
#Chat #Chat
@ -101,11 +102,11 @@ dependencies:
video_player: ^2.5.1 video_player: ^2.5.1
just_audio: ^0.9.30 just_audio: ^0.9.30
# safe_device: ^1.1.2 # safe_device: ^1.1.2
flutter_layout_grid: ^2.0.1 flutter_layout_grid: ^2.0.1
#Huawei Dependencies #Huawei Dependencies
# huawei_hmsavailability: ^6.6.0+300 # huawei_hmsavailability: ^6.6.0+300
huawei_location: 6.0.0+302 huawei_location: 6.0.0+302
huawei_push: ^6.7.0+300 huawei_push: ^6.7.0+300
firebase_crashlytics: ^2.9.0 firebase_crashlytics: ^2.9.0
@ -114,7 +115,7 @@ dependencies:
carousel_slider: ^4.2.1 carousel_slider: ^4.2.1
#Huawei Specified #Huawei Specified
# store_checker: ^1.1.0 # store_checker: ^1.1.0
google_api_availability: ^3.0.1 google_api_availability: ^3.0.1

Loading…
Cancel
Save