Merge branch 'master' into development_haroon

merge-requests/145/head
haroon amjad 3 years ago
commit a07563e7b1

@ -10,9 +10,9 @@
<uses-permission android:name="android.permission.POST_NOTIFICATIONS"/> <uses-permission android:name="android.permission.POST_NOTIFICATIONS"/>
<application <application
android:allowBackup="false"
android:icon="@mipmap/ic_launcher" android:icon="@mipmap/ic_launcher"
android:label="Mohemm" android:label="Mohemm"
android:allowBackup="false"
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

@ -520,6 +520,6 @@
"noUpcoming": "لا يوجد قادم", "noUpcoming": "لا يوجد قادم",
"fakeLocation": ".لقد تتبعنا أنك تحاول استخدام موقع مزيف! يعتبر هذا مخالفة وقد تم إخطار الموارد البشرية", "fakeLocation": ".لقد تتبعنا أنك تحاول استخدام موقع مزيف! يعتبر هذا مخالفة وقد تم إخطار الموارد البشرية",
"noWinner": "حزين! لم يفز أحد اليوم.", "noWinner": "حزين! لم يفز أحد اليوم.",
"myTeam" : "فريقي" "myTeam" : "فريقي",
"youCanPlayDemo": "لكن يمكنك لعب العرض" "youCanPlayDemo": "لكن يمكنك لعب العرض"
} }

@ -520,6 +520,6 @@
"noUpcoming": "There is no upcoming", "noUpcoming": "There is no upcoming",
"fakeLocation": "We traced out that you try to use a fake location! This is considered a violation, and HR has been notified.", "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.", "noWinner": "Sad! No one won today.",
"myTeam" : "My Team" "myTeam" : "My Team",
"youCanPlayDemo": "But you can play demo" "youCanPlayDemo": "But you can play demo"
} }

@ -19,7 +19,11 @@ class APIError {
APIError(this.errorCode, this.errorMessage, this.errorType); APIError(this.errorCode, this.errorMessage, this.errorType);
Map<String, dynamic> toJson() => {'errorCode': errorCode, 'errorMessage': errorMessage, 'errorType': errorType,}; Map<String, dynamic> toJson() => {
'errorCode': errorCode,
'errorMessage': errorMessage,
'errorType': errorType,
};
@override @override
String toString() { String toString() {
@ -79,28 +83,30 @@ class ApiClient {
print("body:$bodyJson"); print("body:$bodyJson");
} }
var response = await postJsonForResponse(url, jsonObject, token: token, queryParameters: queryParameters, headers: _headers, retryTimes: retryTimes, isFormData: isFormData); var response = await postJsonForResponse(url, jsonObject, token: token, queryParameters: queryParameters, headers: _headers, retryTimes: retryTimes, isFormData: isFormData);
// try { try {
if (!kReleaseMode) { if (!kReleaseMode) {
logger.i("res: " + response.body); logger.i("res: " + response.body);
} }
var jsonData = jsonDecode(response.body); var jsonData = jsonDecode(response.body);
if (jsonData["IsAuthenticated"] != null) { if (jsonData["MessageStatus"] == 2) {
AppState().setIsAuthenticated = jsonData["IsAuthenticated"]; AppState().setIsAuthenticated = false;
} }
if (jsonData["ErrorMessage"] == null) {
return factoryConstructor(jsonData);
} else { if (jsonData["ErrorMessage"] == null && jsonData["MessageStatus"] == 1) {
APIError? apiError; return factoryConstructor(jsonData);
apiError = APIError(jsonData['ErrorCode'], jsonData['ErrorEndUserMessage'], jsonData['ErrorType']); } else {
throw APIException(APIException.BAD_REQUEST, error: apiError); APIError? apiError;
apiError = APIError(jsonData['ErrorCode'], jsonData['ErrorEndUserMessage'], jsonData['ErrorType'] ?? 0);
throw APIException(APIException.BAD_REQUEST, error: apiError);
}
} catch (ex) {
if (ex is APIException) {
rethrow;
} else {
throw APIException(APIException.BAD_RESPONSE_FORMAT, arguments: ex);
}
} }
// } catch (ex) {
// if (ex is APIException) {
// rethrow;
// } else {
// throw APIException(APIException.BAD_RESPONSE_FORMAT, arguments: ex);
// }
// }
} }
Future<Response> postJsonForResponse<T>(String url, T jsonObject, Future<Response> postJsonForResponse<T>(String url, T jsonObject,

@ -4,7 +4,7 @@ class ApiConsts {
//static String baseUrl = "http://10.200.204.20:2801/"; // Local server //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://erptstapp.srca.org.sa"; // SRCA server
// static String baseUrl = "https://uat.hmgwebservices.com"; // UAT server // static String baseUrl = "https://uat.hmgwebservices.com"; // UAT server
static String baseUrl = "https://hmgwebservices.com"; // Live server static String baseUrl = "https://hmgwebservices.com"; // Live server
static String baseUrlServices = baseUrl + "/Services/"; // server static String baseUrlServices = baseUrl + "/Services/"; // server
// static String baseUrlServices = "https://api.cssynapses.com/tangheem/"; // Live server // static String baseUrlServices = "https://api.cssynapses.com/tangheem/"; // Live server
static String utilitiesRest = baseUrlServices + "Utilities.svc/REST/"; static String utilitiesRest = baseUrlServices + "Utilities.svc/REST/";
@ -44,7 +44,6 @@ class ApiConsts {
static int tabletMinLength = 500; static int tabletMinLength = 500;
} }
class SharedPrefsConsts { class SharedPrefsConsts {
static String isRememberMe = "remember_me"; static String isRememberMe = "remember_me";
static String username = "username"; static String username = "username";

@ -37,7 +37,7 @@ class AppNotifications {
void initNotification(String? firebaseToken) async { void initNotification(String? firebaseToken) async {
// await requestPermissions(); // await requestPermissions();
AppState().deviceNotificationToken = firebaseToken; AppState().setDeviceToken = firebaseToken;
// await Permission.notification.isDenied.then((value) { // await Permission.notification.isDenied.then((value) {
// if (value) { // if (value) {
// Permission.notification.request(); // Permission.notification.request();

File diff suppressed because it is too large Load Diff

@ -506,7 +506,7 @@ abstract class LocaleKeys {
static const noUpcoming = 'noUpcoming'; static const noUpcoming = 'noUpcoming';
static const fakeLocation = 'fakeLocation'; static const fakeLocation = 'fakeLocation';
static const noWinner = 'noWinner'; static const noWinner = 'noWinner';
static const youCanPlayDemo = 'youCanPlayDemo';
static const myTeam = 'myTeam'; static const myTeam = 'myTeam';
static const youCanPlayDemo = 'youCanPlayDemo';
} }

@ -6,6 +6,7 @@ import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_countdown_timer/flutter_countdown_timer.dart'; import 'package:flutter_countdown_timer/flutter_countdown_timer.dart';
import 'package:flutter_svg/flutter_svg.dart'; import 'package:flutter_svg/flutter_svg.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';
import 'package:mohem_flutter_app/classes/utils.dart'; import 'package:mohem_flutter_app/classes/utils.dart';
@ -41,7 +42,7 @@ class DashboardScreen extends StatefulWidget {
} }
} }
class _DashboardScreenState extends State<DashboardScreen> { class _DashboardScreenState extends State<DashboardScreen> with WidgetsBindingObserver {
late DashboardProviderModel data; late DashboardProviderModel data;
late MarathonProvider marathonProvider; late MarathonProvider marathonProvider;
late ChatProviderModel cProvider; late ChatProviderModel cProvider;
@ -53,6 +54,7 @@ class _DashboardScreenState extends State<DashboardScreen> {
@override @override
void initState() { void initState() {
WidgetsBinding.instance.addObserver(this);
super.initState(); super.initState();
scheduleMicrotask(() { scheduleMicrotask(() {
data = Provider.of<DashboardProviderModel>(context, listen: false); data = Provider.of<DashboardProviderModel>(context, listen: false);
@ -63,8 +65,27 @@ class _DashboardScreenState extends State<DashboardScreen> {
}); });
} }
@override
void didChangeAppLifecycleState(AppLifecycleState state) {
if (state == AppLifecycleState.resumed) {
checkSession();
}
}
void checkSession() async {
try {
Utils.showLoading(context);
await DashboardApiClient().getOpenMissingSwipes();
Utils.hideLoading(context);
} catch (ex) {
Utils.hideLoading(context);
Utils.handleException(ex, context, null);
}
}
@override @override
void dispose() { void dispose() {
WidgetsBinding.instance.removeObserver(this);
super.dispose(); super.dispose();
chatHubConnection.stop(); chatHubConnection.stop();
} }

@ -50,23 +50,23 @@ 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,
), // ),
) // )
], // ],
), ),
backgroundColor: MyColors.backgroundBlackColor, backgroundColor: MyColors.backgroundBlackColor,
body: Consumer<DashboardProviderModel>( body: Consumer<DashboardProviderModel>(
builder: (context, model, child) { builder: (context, model, child) {
return (model.isAttendanceTrackingLoading return (model.isAttendanceTrackingLoading
? Center(child: CircularProgressIndicator()) ? const Center(child: CircularProgressIndicator())
: Column( : Column(
children: [ children: [
Container( Container(

@ -30,6 +30,7 @@ import 'package:mohem_flutter_app/widgets/button/default_button.dart';
import 'package:mohem_flutter_app/widgets/input_widget.dart'; import 'package:mohem_flutter_app/widgets/input_widget.dart';
import 'package:permission_handler/permission_handler.dart'; import 'package:permission_handler/permission_handler.dart';
import 'package:safe_device/safe_device.dart'; import 'package:safe_device/safe_device.dart';
import 'package:wifi_iot/wifi_iot.dart';
class LoginScreen extends StatefulWidget { class LoginScreen extends StatefulWidget {
LoginScreen({Key? key}) : super(key: key); LoginScreen({Key? key}) : super(key: key);
@ -118,7 +119,7 @@ class _LoginScreenState extends State<LoginScreen> {
} }
} catch (ex) { } catch (ex) {
Utils.hideLoading(context); Utils.hideLoading(context);
Utils.handleException(ex, context, (errorMsg) {}); Utils.handleException(ex, context, null);
} }
} }
@ -172,8 +173,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@1234"; password.text = "Abcd@12345";
// username.text = "206535"; // Hashim User // username.text = "206535"; // Hashim User
// password.text = "Namira786"; // password.text = "Namira786";
@ -236,6 +237,14 @@ class _LoginScreenState extends State<LoginScreen> {
Navigator.pushNamed(context, AppRoutes.forgotPassword); Navigator.pushNamed(context, AppRoutes.forgotPassword);
}), }),
), ),
20.height,
// DefaultButton(
// "Connect HMG Network",
// () async {
// SystemChannels.textInput.invokeMethod('TextInput.hide');
// connectWithHmgNetwork();
// },
// ),
], ],
), ),
) )
@ -251,4 +260,30 @@ class _LoginScreenState extends State<LoginScreen> {
), ),
); );
} }
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<bool> closeWifiRequest() async {
if (Platform.isAndroid) {
await WiFiForIoTPlugin.forceWifiUsage(false);
}
return await WiFiForIoTPlugin.disconnect();
}
} }

@ -17,14 +17,14 @@ class SponsorVideoScreen extends StatelessWidget {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
MarathonProvider provider = context.watch<MarathonProvider>(); MarathonProvider provider = context.read<MarathonProvider>();
return WillPopScope( return WillPopScope(
onWillPop: () { onWillPop: () {
provider.timerForSponsorVideo.cancel();
provider.videoController.pause(); provider.videoController.pause();
provider.disposeVideoPlayer(); provider.disposeVideoPlayer();
provider.sponsorsSecondsCounter = 0; provider.sponsorsSecondsCounter = 0;
provider.totalSponsorVideoSeconds = 0; provider.totalSponsorVideoSeconds = 0;
provider.timerForSponsorVideo.cancel();
return Future<bool>.value(true); return Future<bool>.value(true);
}, },
child: Scaffold( child: Scaffold(
@ -49,49 +49,56 @@ class SponsorVideoScreen extends StatelessWidget {
borderRadius: provider.totalSponsorVideoSeconds == 0 ? null : BorderRadius.circular(15), borderRadius: provider.totalSponsorVideoSeconds == 0 ? null : BorderRadius.circular(15),
), ),
padding: const EdgeInsets.symmetric(vertical: 5, horizontal: 8), padding: const EdgeInsets.symmetric(vertical: 5, horizontal: 8),
child: provider.totalSponsorVideoSeconds == 0 child: Consumer<MarathonProvider>(
? InkWell( builder: (BuildContext context, MarathonProvider provider, Widget? child) {
onTap: () { return provider.totalSponsorVideoSeconds == 0
Navigator.pushReplacementNamed(context, AppRoutes.marathonIntroScreen); ? InkWell(
provider.videoController.pause(); onTap: () {
provider.disposeVideoPlayer(); Navigator.pushReplacementNamed(context, AppRoutes.marathonIntroScreen);
provider.sponsorsSecondsCounter = 0; provider.videoController.pause();
provider.totalSponsorVideoSeconds = 0; provider.disposeVideoPlayer();
provider.timerForSponsorVideo.cancel(); provider.sponsorsSecondsCounter = 0;
}, provider.totalSponsorVideoSeconds = 0;
child: const Icon(Icons.close, size: 12), provider.timerForSponsorVideo.cancel();
) },
: Directionality( child: const Icon(Icons.close, size: 12),
textDirection: ui.TextDirection.ltr, )
child: ("${LocaleKeys.ourSponsor.tr()} ${provider.totalSponsorVideoSeconds < 10 ? "0" : ""}${provider.totalSponsorVideoSeconds}").toText12(color: MyColors.darkTextColor), : Directionality(
), textDirection: ui.TextDirection.ltr,
child: ("${LocaleKeys.ourSponsor.tr()} ${provider.totalSponsorVideoSeconds < 10 ? "0" : ""}${provider.totalSponsorVideoSeconds}").toText12(color: MyColors.darkTextColor),
);
},
),
), ),
).paddingOnly(top: 20, right: 18), ).paddingOnly(top: 20, right: 18),
Consumer<MarathonProvider>(
//TODO: WE WILL INCREASE THIS 2 BEFORE GOING LIVE builder: (BuildContext context, MarathonProvider provider, Widget? child) {
provider.sponsorsSecondsCounter >= 2 //TODO: WE WILL INCREASE THIS 2 BEFORE GOING LIVE
? Align( return provider.sponsorsSecondsCounter >= 2
alignment: Alignment.topLeft, ? Align(
child: InkWell( alignment: Alignment.topLeft,
onTap: () { child: InkWell(
Navigator.pushReplacementNamed(context, AppRoutes.marathonIntroScreen); onTap: () {
provider.videoController.pause(); Navigator.pushReplacementNamed(context, AppRoutes.marathonIntroScreen);
provider.disposeVideoPlayer(); provider.videoController.pause();
provider.sponsorsSecondsCounter = 0; provider.disposeVideoPlayer();
provider.totalSponsorVideoSeconds = 0; provider.sponsorsSecondsCounter = 0;
provider.timerForSponsorVideo.cancel(); provider.totalSponsorVideoSeconds = 0;
}, provider.timerForSponsorVideo.cancel();
child: Container( },
decoration: BoxDecoration(color: MyColors.white, borderRadius: BorderRadius.circular(15)), child: Container(
padding: const EdgeInsets.symmetric(vertical: 3, horizontal: 6), decoration: BoxDecoration(color: MyColors.white, borderRadius: BorderRadius.circular(15)),
child: Directionality( padding: const EdgeInsets.symmetric(vertical: 3, horizontal: 6),
textDirection: ui.TextDirection.ltr, child: Directionality(
child: LocaleKeys.skip.tr().toText11(color: MyColors.darkTextColor), textDirection: ui.TextDirection.ltr,
child: LocaleKeys.skip.tr().toText11(color: MyColors.darkTextColor),
),
),
), ),
), ).paddingOnly(top: 20, left: 18)
), : const SizedBox();
).paddingOnly(top: 20, left: 18) },
: const SizedBox(), ),
], ],
), ),
), ),

@ -523,7 +523,7 @@ class MarathonBanner extends StatelessWidget {
).onPress(() async { ).onPress(() async {
int remainingTimeInMinutes = DateTime.parse(provider.marathonDetailModel.startTime!).difference(DateTime.now()).inMinutes; int remainingTimeInMinutes = DateTime.parse(provider.marathonDetailModel.startTime!).difference(DateTime.now()).inMinutes;
if (remainingTimeInMinutes > 2 && provider.marathonDetailModel.sponsors != null && provider.marathonDetailModel.sponsors!.isNotEmpty) { if (remainingTimeInMinutes > 5 && provider.marathonDetailModel.sponsors != null && provider.marathonDetailModel.sponsors!.isNotEmpty) {
Utils.showLoading(context); Utils.showLoading(context);
try { try {
await provider.initializeVideoPlayer().then((_) { await provider.initializeVideoPlayer().then((_) {

@ -261,7 +261,7 @@ class _RequestSubmitScreenState extends State<RequestSubmitScreen> {
title.toText16().expanded, title.toText16().expanded,
6.width, 6.width,
SimpleButton(LocaleKeys.add.tr(), () async { SimpleButton(LocaleKeys.add.tr(), () async {
ImageOptions.showImageOptionsNew(context, false, (String image, File file) { ImageOptions.showImageOptionsNew(context, true, (String image, File file) {
setState(() { setState(() {
attachmentFiles.add(file); attachmentFiles.add(file);
attachments.add(image); attachments.add(image);

@ -12,6 +12,7 @@ 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/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/provider/dashboard_provider_model.dart'; import 'package:mohem_flutter_app/provider/dashboard_provider_model.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';
@ -47,7 +48,7 @@ class _MarkAttendanceWidgetState extends State<MarkAttendanceWidget> {
void checkAttendanceAvailability() async { void checkAttendanceAvailability() async {
bool isAvailable = await NfcManager.instance.isAvailable(); bool isAvailable = await NfcManager.instance.isAvailable();
setState(() { setState(() {
AppState().privilegeListModel!.forEach((element) { AppState().privilegeListModel!.forEach((PrivilegeListModel element) {
if (element.serviceName == "enableNFC") { if (element.serviceName == "enableNFC") {
if (isAvailable) if (element.previlege ?? false) isNfcEnabled = true; if (isAvailable) if (element.previlege ?? false) isNfcEnabled = true;
} else if (element.serviceName == "enableQR") { } else if (element.serviceName == "enableQR") {
@ -144,6 +145,7 @@ class _MarkAttendanceWidgetState extends State<MarkAttendanceWidget> {
Future<void> performNfcAttendance(DashboardProviderModel model, {String lat = "0", String lng = "0"}) async { Future<void> performNfcAttendance(DashboardProviderModel model, {String lat = "0", String lng = "0"}) 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);
try { try {
@ -152,7 +154,7 @@ class _MarkAttendanceWidgetState extends State<MarkAttendanceWidget> {
Utils.hideLoading(context); Utils.hideLoading(context);
showDialog( showDialog(
context: context, context: context,
builder: (cxt) => ConfirmDialog( builder: (BuildContext cxt) => ConfirmDialog(
message: g?.errorEndUserMessage ?? "Unexpected error occurred", message: g?.errorEndUserMessage ?? "Unexpected error occurred",
onTap: () { onTap: () {
Navigator.pop(context); Navigator.pop(context);
@ -172,9 +174,7 @@ class _MarkAttendanceWidgetState extends State<MarkAttendanceWidget> {
} }
} catch (ex) { } catch (ex) {
Utils.hideLoading(context); Utils.hideLoading(context);
Utils.handleException(ex, context, (msg) { Utils.handleException(ex, context, null);
Utils.confirmDialog(context, msg);
});
} }
}); });
} else { } else {
@ -186,7 +186,7 @@ class _MarkAttendanceWidgetState extends State<MarkAttendanceWidget> {
Utils.hideLoading(context); Utils.hideLoading(context);
showDialog( showDialog(
context: context, context: context,
builder: (cxt) => ConfirmDialog( builder: (BuildContext cxt) => ConfirmDialog(
message: g?.errorEndUserMessage ?? "Unexpected error occurred", message: g?.errorEndUserMessage ?? "Unexpected error occurred",
onTap: () { onTap: () {
Navigator.pop(context); Navigator.pop(context);
@ -206,7 +206,7 @@ class _MarkAttendanceWidgetState extends State<MarkAttendanceWidget> {
} catch (ex) { } catch (ex) {
print(ex); print(ex);
Utils.hideLoading(context); Utils.hideLoading(context);
Utils.handleException(ex, context, (msg) { Utils.handleException(ex, context, (String msg) {
Utils.confirmDialog(context, msg); Utils.confirmDialog(context, msg);
}); });
} }
@ -228,19 +228,23 @@ class _MarkAttendanceWidgetState extends State<MarkAttendanceWidget> {
} }
if (isConnected) { if (isConnected) {
if (Platform.isIOS) { // if (Platform.isIOS) {
await closeWifiRequest(); // await closeWifiRequest();
await Future.delayed(Duration(seconds: 6)); // await Future.delayed(Duration(seconds: 6));
} else { // } else {
await WiFiForIoTPlugin.forceWifiUsage(true); // await WiFiForIoTPlugin.forceWifiUsage(true);
} // }
await WiFiForIoTPlugin.forceWifiUsage(true);
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);
if (Platform.isAndroid) { // if (Platform.isAndroid) {
await closeWifiRequest(); // await closeWifiRequest();
} // }
await closeWifiRequest();
showMDialog( showMDialog(
context, context,
backgroundColor: Colors.transparent, backgroundColor: Colors.transparent,
@ -250,9 +254,7 @@ class _MarkAttendanceWidgetState extends State<MarkAttendanceWidget> {
} catch (ex) { } catch (ex) {
await closeWifiRequest(); await closeWifiRequest();
Utils.hideLoading(context); Utils.hideLoading(context);
Utils.handleException(ex, context, (msg) { Utils.handleException(ex, context, null);
Utils.confirmDialog(context, msg);
});
} }
} else { } else {
Utils.hideLoading(context); Utils.hideLoading(context);
@ -270,7 +272,7 @@ class _MarkAttendanceWidgetState extends State<MarkAttendanceWidget> {
Future<void> performQrCodeAttendance(DashboardProviderModel model, {String lat = "0", String lng = "0"}) async { Future<void> performQrCodeAttendance(DashboardProviderModel model, {String lat = "0", String lng = "0"}) async {
var qrCodeValue = await Navigator.of(context).push( var qrCodeValue = await Navigator.of(context).push(
MaterialPageRoute( MaterialPageRoute(
builder: (context) => QrScannerDialog(), builder: (BuildContext context) => QrScannerDialog(),
), ),
); );
if (qrCodeValue != null) { if (qrCodeValue != null) {
@ -288,9 +290,7 @@ class _MarkAttendanceWidgetState extends State<MarkAttendanceWidget> {
} catch (ex) { } catch (ex) {
print(ex); print(ex);
Utils.hideLoading(context); Utils.hideLoading(context);
Utils.handleException(ex, context, (msg) { Utils.handleException(ex, context, null);
Utils.confirmDialog(context, msg);
});
} }
} }
} }
@ -304,9 +304,7 @@ class _MarkAttendanceWidgetState extends State<MarkAttendanceWidget> {
} catch (ex) { } catch (ex) {
print(ex); print(ex);
Utils.hideLoading(context); Utils.hideLoading(context);
Utils.handleException(ex, context, (msg) { Utils.handleException(ex, context, null);
Utils.confirmDialog(context, msg);
});
} }
} }

@ -67,7 +67,7 @@ dependencies:
month_year_picker: ^0.2.0+1 month_year_picker: ^0.2.0+1
month_picker_dialog_2: 0.5.5 month_picker_dialog_2: 0.5.5
open_file: ^3.2.1 open_file: ^3.2.1
wifi_iot: ^0.3.16 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.0 qr_code_scanner: ^1.0.0

Loading…
Cancel
Save