add swipe and forget password apis

design_3.0_latest
WaseemAbbasi22 10 months ago
parent ef38c3d2bd
commit ba50ed5809

@ -5,7 +5,8 @@ class URLs {
static const host1 = "https://atomsmdev.hmg.com"; // local UAT url
// static String _baseUrl = "$_host/mobile";
static final String _baseUrl = "$_host/v2/mobile"; // new V2 apis
// static final String _baseUrl = "$_host/v2/mobile"; // new V2 apis
static final String _baseUrl = "$_host/v3/mobile"; // new V3 apis
static String _host = host1;
@ -18,6 +19,11 @@ class URLs {
// API Routes
static get login => "$_baseUrl/MobileAuth/Login"; // web login
static get checkLoginValidation => "$_baseUrl/Account/Authenticate"; // web login
//Reset Password Apis...
static get sendForgetPasswordOtp => "$_baseUrl/Account/SendForgotPasswordOtp"; // send OTP.
static get sendForgetPasswordValidateOtp => "$_baseUrl/Account/SendForgotPasswordValidateOtp"; // validate OTP.
static get updateNewPassword => "$_baseUrl/Account/UpdatenewPassword"; // validate OTP.
// static get login => "$_baseUrl/MobileAuth/LoginIntegration"; // mobile login
static get register => "$_baseUrl/handle/create/user"; // post
static get updateProfile => "$_baseUrl/update/user/profile"; // post
@ -70,6 +76,11 @@ class URLs {
static get sendOtpUrl=> '$_baseUrl/SmsNotification/SendOTP/';
static get verifyOtpUrl=> '$_baseUrl/SmsNotification/VerifyOTP/';
// 08051
//Swipe module Apis need to ask backend why base url changed for this api..
static get swipeUrl=> '$_baseUrl/Swipe/Swipe';
static get getSwipeLastTransactionUrl=> '$_baseUrl/Swipe/GetLastTransaction';
//service request.....
static get getServiceRequests => "$_baseUrl/CallRequest/GetCallRequests"; // get
static get getServiceRequestById => "$_baseUrl/CallRequest/GetCallRequestById"; // get
static get getServiceRequestThrough => "$_baseUrl/Lookups/GetLookup?lookupEnum=603"; // get

@ -5,6 +5,7 @@ import 'package:flutter/material.dart';
import 'package:http/http.dart';
import 'package:test_sa/controllers/api_routes/api_manager.dart';
import 'package:test_sa/controllers/api_routes/urls.dart';
import 'package:test_sa/models/new_models/general_response_model.dart';
import 'package:test_sa/models/user.dart';
import '../../../new_views/common_widgets/app_lazy_loading.dart';
@ -116,7 +117,96 @@ class UserProvider extends ChangeNotifier {
// }
// return response.statusCode;
// }
Future<GeneralResponseModel> sendForgetPasswordOtp({required BuildContext context, required String employeeId}) async {
GeneralResponseModel responseModel= GeneralResponseModel(responseCode: -1) ;
if (_loading == true) return responseModel;
_loading = true;
notifyListeners();
Response response;
try {
showDialog(context: context, barrierDismissible: false, builder: (context) => const AppLazyLoading());
response = await ApiManager.instance.postWithOutBody(
URLs.sendOtpUrl + '?$employeeId',
);
responseModel = GeneralResponseModel.fromJson(json.decode(response.body));
_loading = false;
if (response.statusCode >= 200 && response.statusCode < 300) {
notifyListeners();
Navigator.pop(context);
return responseModel;
}
notifyListeners();
Navigator.pop(context);
return responseModel;
} catch (error) {
// debugPrint(error);
Navigator.pop(context);
_loading = false;
notifyListeners();
return responseModel;
}
}
Future<GeneralResponseModel> forgetPasswordValidateOtp({required BuildContext context, required String employeeId, required String otp}) async {
GeneralResponseModel responseModel= GeneralResponseModel(responseCode: -1) ;
if (_loading == true) return responseModel;
_loading = true;
notifyListeners();
Response response;
try {
showDialog(context: context, barrierDismissible: false, builder: (context) => const AppLazyLoading());
response = await ApiManager.instance.postWithOutBody(
URLs.sendOtpUrl + '?employeeId=$employeeId&otp=$otp',
);
responseModel = GeneralResponseModel.fromJson(json.decode(response.body));
_loading = false;
if (response.statusCode >= 200 && response.statusCode < 300) {
notifyListeners();
Navigator.pop(context);
return responseModel;
}
notifyListeners();
Navigator.pop(context);
return responseModel;
} catch (error) {
// debugPrint(error);
Navigator.pop(context);
_loading = false;
notifyListeners();
return responseModel;
}
}
Future<GeneralResponseModel> updateNewPassword({required BuildContext context, required String userId}) async {
GeneralResponseModel responseModel= GeneralResponseModel(responseCode: -1) ;
if (_loading == true) return responseModel;
_loading = true;
notifyListeners();
Response response;
try {
showDialog(context: context, barrierDismissible: false, builder: (context) => const AppLazyLoading());
response = await ApiManager.instance.postWithOutBody(
URLs.sendOtpUrl + userId,
);
responseModel = GeneralResponseModel.fromJson(json.decode(response.body));
_loading = false;
if (response.statusCode >= 200 && response.statusCode < 300) {
notifyListeners();
Navigator.pop(context);
return responseModel;
}
notifyListeners();
Navigator.pop(context);
return responseModel;
} catch (error) {
// debugPrint(error);
Navigator.pop(context);
_loading = false;
notifyListeners();
return responseModel;
}
}
Future<int> uploadProfileImage(String userId, File image) async {
if (_loading == true) return -2;
_loading = true;

@ -8,6 +8,7 @@ import 'package:test_sa/controllers/api_routes/urls.dart';
import 'package:test_sa/models/enums/user_types.dart';
import 'package:test_sa/models/new_models/dashboard_count.dart';
import 'package:test_sa/models/new_models/dashboard_detail.dart' as DD;
import 'package:test_sa/models/new_models/swipe_model.dart';
import '../controllers/providers/api/user_provider.dart';
@ -85,7 +86,7 @@ class DashBoardProvider extends ChangeNotifier {
setTabs(userType: userType, context: context);
getDashBoardCount(usersType: userType);
resetRequestDataList();
getRequestDetail(usersType: userType, status: tabs[currentListIndex].tag,tabId:tabs[currentListIndex].id);
getRequestDetail(usersType: userType, status: tabs[currentListIndex].tag, tabId: tabs[currentListIndex].id);
// notifyListeners();
}
@ -184,7 +185,55 @@ class DashBoardProvider extends ChangeNotifier {
getRequestDetail(showLoader: showLoader, usersType: usersType, status: 4);
}
Future<int> getRequestDetail({bool showLoader = true, required UsersTypes usersType, int? status, bool isHighPriority = false, bool isOverdue = false, String? date,int? tabId}) async {
Future<SwipeModel> makeSwipe({required Swipe model}) async {
isLoading = true;
SwipeModel swipeResponse = SwipeModel(data: false, message: '', responseCode: 0, isSuccess: false);
notifyListeners();
Response response;
try {
response = await ApiManager.instance.post(URLs.swipeUrl, body: model.toJson());
stateCode = response.statusCode;
if (response.statusCode >= 200 && response.statusCode < 300) {
swipeResponse = SwipeModel.fromJson(json.decode(response.body));
}
isAllCountLoading = false;
notifyListeners();
return swipeResponse;
} catch (error) {
isAllCountLoading = false;
stateCode = -1;
notifyListeners();
return swipeResponse;
}
}
Future<int> getSwipeLastTransaction({required String userId}) async {
isLoading = true;
notifyListeners();
Response response;
var body = {
"userId": userId,
};
try {
response = await ApiManager.instance.post(URLs.getSwipeLastTransactionUrl, body: body);
stateCode = response.statusCode;
if (response.statusCode >= 200 && response.statusCode < 300) {}
isAllCountLoading = false;
notifyListeners();
return response.statusCode;
} catch (error) {
isAllCountLoading = false;
stateCode = -1;
notifyListeners();
return -1;
}
}
Future<int> getRequestDetail({bool showLoader = true, required UsersTypes usersType, int? status, bool isHighPriority = false, bool isOverdue = false, String? date, int? tabId}) async {
if (showLoader) {
isDetailLoading = showLoader;
notifyListeners();
@ -200,14 +249,11 @@ class DashBoardProvider extends ChangeNotifier {
//these checks are to call different apis for dashboard for engineer...
if (status == 0) {
url = URLs.engineerDashboardUpcoming;
}
else if (status == 1&&tabId==1) {
} else if (status == 1 && tabId == 1) {
url = URLs.engineerDashboardNotAssignDetails;
}
else if (status == 1&&tabId==2) {
} else if (status == 1 && tabId == 2) {
url = URLs.engineerDashboardDetailsUrl;
}
else {
} else {
url = URLs.engineerDashboardDetailsUrl;
}
} else {
@ -217,7 +263,7 @@ class DashBoardProvider extends ChangeNotifier {
Map<String, dynamic> body = {"pageNumber": pageNum, "pageSize": pageItemNumber};
if (status != null && status == 0) {
body["date"] = date ??upcomingFilterSelectedDate.toIso8601String();
body["date"] = date ?? upcomingFilterSelectedDate.toIso8601String();
} else {
body["statusValue"] = status;
}
@ -311,26 +357,26 @@ class CategoryTabs {
int id;
CategoryTabs({
required this.label,
required this.label,
required this.tag,
required this.id,
required this.id,
});
static List<CategoryTabs> getTabs({required UsersTypes userType, required BuildContext context}) {
List<CategoryTabs> tabs = [];
if (userType == UsersTypes.engineer) {
tabs.add(CategoryTabs(label: 'Upcoming',tag: 0,id: 0));
tabs.add(CategoryTabs(label: 'Upcoming', tag: 0, id: 0));
// tabs.add(CategoryTabs('Open', 1));
tabs.add(CategoryTabs(label: 'UnAssigned Open',tag: 1,id: 1));
tabs.add(CategoryTabs(label: 'Assigned Open',tag: 1,id: 2));
tabs.add(CategoryTabs(label: 'In Progress',tag: 2,id: 3));
tabs.add(CategoryTabs(label: 'Completed',tag: 3,id: 4));
tabs.add(CategoryTabs(label: 'UnAssigned Open', tag: 1, id: 1));
tabs.add(CategoryTabs(label: 'Assigned Open', tag: 1, id: 2));
tabs.add(CategoryTabs(label: 'In Progress', tag: 2, id: 3));
tabs.add(CategoryTabs(label: 'Completed', tag: 3, id: 4));
return tabs;
}
tabs.add(CategoryTabs(label: 'Upcoming',tag: 3,id: 1));
tabs.add(CategoryTabs(label: 'Open Request',tag: 1,id: 2));
tabs.add(CategoryTabs(label: 'In Progress',tag: 2,id: 3));
tabs.add(CategoryTabs(label: 'Canceled',tag: 6,id: 4));
tabs.add(CategoryTabs(label: 'Upcoming', tag: 3, id: 1));
tabs.add(CategoryTabs(label: 'Open Request', tag: 1, id: 2));
tabs.add(CategoryTabs(label: 'In Progress', tag: 2, id: 3));
tabs.add(CategoryTabs(label: 'Canceled', tag: 6, id: 4));
return tabs;
}
}

@ -1,4 +1,5 @@
import 'package:test_sa/app_strings/app_asset.dart';
import 'package:test_sa/models/enums/swipe_type.dart';
import 'package:test_sa/models/enums/work_order_next_step.dart';
extension EnumExtensionsWorkOrder on WorkOrderNextStepEnum {
@ -92,3 +93,16 @@ extension IntExtensionsWorkOrder on int {
}
}
}
extension EnumExtensionsSwipeType on SwipeTypeEnum {
int getIntFromSwipeTypeEnum() {
switch (this) {
case SwipeTypeEnum.NFC:
return 1;
case SwipeTypeEnum.QR:
return 2;
case SwipeTypeEnum.Wifi:
return 3;
}
}
}

@ -0,0 +1,5 @@
enum SwipeTypeEnum {
NFC, // 1
QR, // 2
Wifi, // 3
}

@ -0,0 +1,32 @@
class GeneralResponseModel {
bool? data;
String? message;
String? title;
String? innerMessage;
int? responseCode;
bool? isSuccess;
GeneralResponseModel({this.data, this.message, this.title, this.innerMessage, this.responseCode, this.isSuccess});
factory GeneralResponseModel.fromJson(Map<String, dynamic> json) {
return GeneralResponseModel(
data: json['data'],
message: json['message'] ?? '',
title: json['title'],
innerMessage: json['innerMessage'],
responseCode: json['responseCode'],
isSuccess: json['isSuccess'],
);
}
Map<String, dynamic> toJson() {
return {
'data': data,
'message': message,
'title': title,
'innerMessage': innerMessage,
'responseCode': responseCode,
'isSuccess': isSuccess,
};
}
}

@ -0,0 +1,66 @@
class SwipeModel {
final bool data;
final String message;
final String? title;
final String? innerMessage;
final int responseCode;
final bool isSuccess;
SwipeModel({
required this.data,
required this.message,
this.title,
this.innerMessage,
required this.responseCode,
required this.isSuccess,
});
factory SwipeModel.fromJson(Map<String, dynamic> json) {
return SwipeModel(
data: json['data'] as bool,
message: json['message'] as String,
title: json['title'] as String?,
innerMessage: json['innerMessage'] as String?,
responseCode: json['responseCode'] as int,
isSuccess: json['isSuccess'] as bool,
);
}
Map<String, dynamic> toJson() {
return {
'data': data,
'message': message,
'title': title,
'innerMessage': innerMessage,
'responseCode': responseCode,
'isSuccess': isSuccess,
};
}
}
class Swipe {
final int swipeTypeValue;
final String value;
final double ?latitude;
final double ?longitude;
Swipe({
required this.swipeTypeValue,
required this.value,
required this.latitude,
required this.longitude,
});
Map<String, dynamic> toJson() {
return {
'swipeTypeValue': swipeTypeValue,
'value': value,
'latitude': latitude,
'longitude': longitude,
};
}
}

@ -0,0 +1,31 @@
class UpdatePassword {
final String password;
final String confirmPassword;
final String email;
final String token;
UpdatePassword({
required this.password,
required this.confirmPassword,
required this.email,
required this.token,
});
factory UpdatePassword.fromJson(Map<String, dynamic> json) {
return UpdatePassword(
password: json['password'] as String,
confirmPassword: json['confirmPassword'] as String,
email: json['email'] as String,
token: json['token'] as String,
);
}
Map<String, dynamic> toJson() {
return {
'password': password,
'confirmPassword': confirmPassword,
'email': email,
'token': token,
};
}
}

@ -1,34 +1,25 @@
import 'dart:async';
import 'dart:developer';
import 'dart:io';
import 'package:flutter/material.dart';
import 'package:flutter_svg/flutter_svg.dart';
import 'package:geolocator/geolocator.dart';
import 'package:huawei_location/huawei_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:permission_handler/permission_handler.dart';
import 'package:provider/provider.dart';
import 'package:test_sa/dashboard_latest/dashboard_provider.dart';
// import 'package:platform_device_id/platform_device_id.dart';
import 'package:test_sa/dashboard_latest/widgets/app_bar_widget.dart';
import 'package:test_sa/extensions/enum_extensions.dart';
import 'package:test_sa/extensions/text_extensions.dart';
import 'package:test_sa/extensions/widget_extensions.dart';
import 'package:test_sa/helper/utils.dart';
import 'package:test_sa/models/enums/swipe_type.dart';
import 'package:test_sa/models/lookup.dart';
import 'package:test_sa/models/new_models/swipe_model.dart';
import 'package:test_sa/nfc/nfc_reader_sheet.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/classes/colors.dart';
// import 'package:mohem_flutter_app/classes/utils.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/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/ui/dialogs/success_dialog.dart';
// import 'package:mohem_flutter_app/widgets/dialogs/confirm_dialog.dart';
// import 'package:mohem_flutter_app/widgets/dialogs/dialogs.dart';im
import 'package:test_sa/utilities/Location.dart' as location;
import 'package:test_sa/views/widgets/dialogs/confirm_dialog.dart';
import 'package:test_sa/views/widgets/dialogs/success_dialog.dart';
@ -174,7 +165,10 @@ class _MarkAttendanceWidgetState extends State<MarkAttendanceWidget> {
gridDelegate:
SliverGridDelegateWithFixedCrossAxisCount(crossAxisCount: (MediaQuery.of(context).size.width < 550) ? 3 : 5, childAspectRatio: 1 / 1, crossAxisSpacing: 8, mainAxisSpacing: 8),
children: <Widget>[
attendanceMethod("NFC", Icons.nfc, isNfcEnabled, () {
attendanceMethod(SwipeTypeEnum.NFC.name, Icons.nfc, true, () {
log('i am here...nfc');
handleSwipe(swipeType: SwipeTypeEnum.NFC, isEnable: true);
return;
// if (AppState().getIsHuawei) {
if (false) {
checkHuaweiLocationPermission("NFC");
@ -284,7 +278,9 @@ class _MarkAttendanceWidgetState extends State<MarkAttendanceWidget> {
}
}),
// if (isQrEnabled) //todo
attendanceMethod("QR", Icons.qr_code_2, isQrEnabled, () async {
attendanceMethod(SwipeTypeEnum.QR.name, Icons.qr_code_2, true, () async {
handleSwipe(swipeType: SwipeTypeEnum.QR, isEnable: true);
return;
// if (AppState().getIsHuawei) {
if (false) {
checkHuaweiLocationPermission("QR");
@ -345,6 +341,77 @@ class _MarkAttendanceWidgetState extends State<MarkAttendanceWidget> {
);
}
void handleSwipe({required SwipeTypeEnum swipeType,required bool isEnable,}){
log('handle swipe value is ${swipeType.name}');
// if (AppState().getIsHuawei) {
if (false) {
checkHuaweiLocationPermission("NFC");
} else {
location.Location.isEnabled((bool isEnabled) {
if (isEnabled) {
location.Location.havePermission((bool permission) {
if (permission) {
Utils.showLoading(context);
location.Location.getCurrentLocation(
(Position position, bool isMocked) {
if (isMocked) {
Utils.hideLoading(context);
markFakeAttendance(swipeType.name, position.latitude.toString() ?? "", position.longitude.toString() ?? "");
} else {
Utils.hideLoading(context);
//todo performNfcAttendance(widget.model, lat: position.latitude.toString() ?? "", lng: position.longitude.toString() ?? "");
handleSwipeOperation(swipeType: swipeType,lat: position.latitude,lang: position.longitude);
}
},
() {
Utils.hideLoading(context);
Utils.confirmDialog(context, "Unable to determine your location, Please make sure that your location services are turned on & working.");
},
context,
);
} else {
showDialog(
context: context,
builder: (BuildContext cxt) => ConfirmDialog(
message: "You need to give location permission to mark attendance",
onTap: () async {
Navigator.pop(context);
await Geolocator.openAppSettings();
},
),
);
}
});
} else {
showDialog(
context: context,
builder: (BuildContext cxt) => ConfirmDialog(
message: "You need to enable location services to mark attendance",
onTap: () async {
Navigator.pop(context);
await Geolocator.openLocationSettings();
},
),
);
}
});
}
}
void handleSwipeOperation({required SwipeTypeEnum swipeType,double ?lat, double ?lang}){
switch(swipeType){
case SwipeTypeEnum.NFC:
handleNfcAttendance(latitude: lat,longitude: lang);
return;
case SwipeTypeEnum.QR:
performQrCodeAttendance(latitude: lat,longitude: lang);
return;
case SwipeTypeEnum.Wifi:
return;
}
}
void getHuaweiCurrentLocation(String attendanceType) async {
try {
Utils.showLoading(context);
@ -399,93 +466,198 @@ class _MarkAttendanceWidgetState extends State<MarkAttendanceWidget> {
// }
// }
// }).catchError((error) {
// print("HUAWEI LOCATION getLastLocation ERROR!!!!!");
// print(error);
// log("HUAWEI LOCATION getLastLocation ERROR!!!!!");
// log(error);
// });
// }).catchError((error) {
// print("HUAWEI LOCATION checkLocationSettings ERROR!!!!!");
// print(error);
// log("HUAWEI LOCATION checkLocationSettings ERROR!!!!!");
// log(error);
// if (error.code == "LOCATION_SETTINGS_NOT_AVAILABLE") {
// // Location service not enabled.
// }
// });
} catch (error) {
print("HUAWEI LOCATION ERROR!!!!!");
print(error);
log("HUAWEI LOCATION ERROR!!!!!");
log('$error');
Utils.hideLoading(context);
// Utils.handleException(error, context, null);
}
}
//
// Future<void> performNfcAttendance(DashboardProviderModel model, {String lat = "0", String lng = "0"}) async {
// if (Platform.isIOS) {
// Utils.readNFc(onRead: (String nfcId) async {
// Utils.showLoading(context);
// try {
// GenericResponseModel? g = await DashboardApiClient().markAttendance(pointType: 2, nfcValue: nfcId, isGpsRequired: isNfcLocationEnabled, lat: lat, long: lng);
// if (g?.messageStatus != 1) {
// Utils.hideLoading(context);
// showDialog(
// context: context,
// builder: (BuildContext cxt) => ConfirmDialog(
// message: g?.errorEndUserMessage ?? "Unexpected error occurred",
// onTap: () {
// Navigator.pop(context);
// },
// ),
// );
// } else {
// bool status = await model.fetchAttendanceTracking(context);
// if (Platform.isIOS) await Future.delayed(const Duration(seconds: 3));
// Utils.hideLoading(context);
// showMDialog(
// context,
// backgroundColor: Colors.transparent,
// isDismissable: true,
// child: SuccessDialog(widget.isFromDashboard),
// );
// }
// } catch (ex) {
// Utils.hideLoading(context);
// Utils.handleException(ex, context, null);
// }
// });
// } else {
// showNfcReader(context, onNcfScan: (String? nfcId) async {
// Utils.showLoading(context);
// try {
// GenericResponseModel? g = await DashboardApiClient().markAttendance(pointType: 2, nfcValue: nfcId ?? "", isGpsRequired: isNfcLocationEnabled, lat: lat, long: lng);
// if (g?.messageStatus != 1) {
// Utils.hideLoading(context);
// showDialog(
// context: context,
// builder: (BuildContext cxt) => ConfirmDialog(
// message: g?.errorEndUserMessage ?? "Unexpected error occurred",
// onTap: () {
// Navigator.pop(context);
// },
// ),
// );
// } else {
// bool status = await model.fetchAttendanceTracking(context);
// Utils.hideLoading(context);
// showMDialog(
// context,
// backgroundColor: Colors.transparent,
// isDismissable: false,
// child: SuccessDialog(widget.isFromDashboard),
// );
// }
// } catch (ex) {
// print(ex);
// Utils.hideLoading(context);
// // Utils.handleException(ex, context, (String msg) {
// // Utils.confirmDialog(context, msg);
// // });
// }
// });
// }
// }
Future<void> handleNfcAttendance({double? latitude = 0, double? longitude = 0}) async {
final dashBoardProvider = Provider.of<DashBoardProvider>(context, listen: false);
if (Platform.isIOS) {
Utils.readNFc(onRead: (String nfcId) async {
await _processNfcAttendance(dashBoardProvider, nfcId, latitude, longitude);
});
} else {
showNfcReader(context, onNcfScan: (String? nfcId) async {
await _processNfcAttendance(dashBoardProvider, nfcId ?? '', latitude, longitude);
});
}
}
Future<void> _processNfcAttendance(
DashBoardProvider dashBoardProvider,
String nfcId,
double? latitude,
double? longitude,
) async {
Utils.showLoading(context);
try {
final swipeModel = Swipe(
swipeTypeValue: SwipeTypeEnum.NFC.getIntFromSwipeTypeEnum(),
value: nfcId,
latitude: latitude,
longitude: longitude,
);
final swipeResponse = await dashBoardProvider.makeSwipe(model: swipeModel);
log('swipe response i got is ${swipeResponse.toJson()}');
if (swipeResponse.responseCode != 1) {
Utils.hideLoading(context);
_showErrorDialog(swipeResponse.message ?? "Unexpected error occurred");
} else {
final isSuccess = swipeResponse.data;
log('nfc swipe response is ${isSuccess}');
if (Platform.isIOS) await Future.delayed(const Duration(seconds: 3));
Utils.hideLoading(context);
_showSuccessDialog();
}
} catch (error) {
Utils.hideLoading(context);
// Uncomment below line for error handling if needed
// Utils.handleException(error, context, null);
}
}
void _showErrorDialog(String message) {
showDialog(
context: context,
builder: (context) => ConfirmDialog(
message: message,
onTap: () => Navigator.pop(context),
),
);
}
void _showSuccessDialog() {
showMDialog(
context,
backgroundColor: Colors.transparent,
isDismissable: true,
child: SuccessDialog(widget.isFromDashboard),
);
}
//older code....
Future<void> performNfcAttendance({double? lat = 0, double ?lng = 0}) async {
DashBoardProvider dashBoardProvider = Provider.of<DashBoardProvider>(context,listen:false);
if (Platform.isIOS) {
Utils.readNFc(onRead: (String nfcId) async {
Utils.showLoading(context);
try {
SwipeModel? swipeResponse = await dashBoardProvider.makeSwipe(model: Swipe(swipeTypeValue: SwipeTypeEnum.NFC.getIntFromSwipeTypeEnum(), value: '', latitude: lat, longitude: lng));
if (swipeResponse.responseCode != 1) {
Utils.hideLoading(context);
showDialog(
context: context,
builder: (BuildContext cxt) => ConfirmDialog(
message: swipeResponse.message ?? "Unexpected error occurred",
onTap: () {
Navigator.pop(context);
},
),
);
} else {
bool status = swipeResponse.data;
if (Platform.isIOS) await Future.delayed(const Duration(seconds: 3));
Utils.hideLoading(context);
showMDialog(
context,
backgroundColor: Colors.transparent,
isDismissable: true,
child: SuccessDialog(widget.isFromDashboard),
);
}
} catch (ex) {
Utils.hideLoading(context);
// Utils.handleException(ex, context, null);
}
});
} else {
showNfcReader(context, onNcfScan: (String? nfcId) async {
Utils.showLoading(context);
try {
SwipeModel? swipeResponse = await dashBoardProvider.makeSwipe(model: Swipe(swipeTypeValue: SwipeTypeEnum.NFC.getIntFromSwipeTypeEnum(), value: nfcId??'', latitude: lat, longitude: lng));
log('api response i got is ${swipeResponse.toJson()}');
if (swipeResponse.responseCode != 1) {
Utils.hideLoading(context);
showDialog(
context: context,
builder: (BuildContext cxt) => ConfirmDialog(
message: swipeResponse.message ?? "Unexpected error occurred",
onTap: () {
Navigator.pop(context);
},
),
);
} else {
bool status = swipeResponse.data; //use this status to get transactions.
if (Platform.isIOS) await Future.delayed(const Duration(seconds: 3));
Utils.hideLoading(context);
showMDialog(
context,
backgroundColor: Colors.transparent,
isDismissable: true,
child: SuccessDialog(widget.isFromDashboard),
);
}
} catch (ex) {
Utils.hideLoading(context);
// Utils.handleException(ex, context, null);
}
// Utils.showLoading(context);
// try {
// GenericResponseModel? g = await DashboardApiClient().markAttendance(pointType: 2, nfcValue: nfcId ?? "", isGpsRequired: isNfcLocationEnabled, lat: lat, long: lng);
// if (g?.messageStatus != 1) {
// Utils.hideLoading(context);
// showDialog(
// context: context,
// builder: (BuildContext cxt) => ConfirmDialog(
// message: g?.errorEndUserMessage ?? "Unexpected error occurred",
// onTap: () {
// Navigator.pop(context);
// },
// ),
// );
// } else {
// bool status = await model.fetchAttendanceTracking(context);
// Utils.hideLoading(context);
// showMDialog(
// context,
// backgroundColor: Colors.transparent,
// isDismissable: false,
// child: SuccessDialog(widget.isFromDashboard),
// );
// }
// } catch (ex) {
// log(ex);
// Utils.hideLoading(context);
// // Utils.handleException(ex, context, (String msg) {
// // Utils.confirmDialog(context, msg);
// // });
// }
});
}
}
void showMDialog(context, {Widget? child, Color? backgroundColor, bool isDismissable = true, bool isBusniessCard = false}) async {
return showDialog(
@ -520,12 +692,14 @@ class _MarkAttendanceWidgetState extends State<MarkAttendanceWidget> {
// }
// }
// Future<void> performWifiAttendance(DashboardProviderModel model, {String lat = "0", String lng = "0"}) async {
// if (Platform.isAndroid) {
// if (!(await checkSession())) {
// return;
// }
// }
//TODO need to confirm ....
// Future<void> performWifiAttendance({double? latitude, double? lng}) 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);
@ -588,54 +762,65 @@ class _MarkAttendanceWidgetState extends State<MarkAttendanceWidget> {
return await WiFiForIoTPlugin.disconnect();
}
// Future<void> performQrCodeAttendance(DashboardProviderModel model, {String lat = "0", String lng = "0"}) async {
// var qrCodeValue = await Navigator.of(context).push(
// MaterialPageRoute(
// builder: (BuildContext context) => QrScannerDialog(),
// ),
// );
// if (qrCodeValue != null) {
// Utils.showLoading(context);
// try {
// GenericResponseModel? g = await DashboardApiClient().markAttendance(pointType: 1, isGpsRequired: isQrLocationEnabled, lat: lat, long: lng, QRValue: qrCodeValue);
// bool status = await model.fetchAttendanceTracking(context);
// Utils.hideLoading(context);
// if (g?.messageStatus == 2) {
// showDialog(
// barrierDismissible: true,
// context: context,
// builder: (cxt) => ConfirmDialog(
// message: g?.errorEndUserMessage ?? "",
// onTap: () {
// Navigator.pop(context);
// },
// onCloseTap: () {},
// ),
// );
// } else {
// showMDialog(
// context,
// backgroundColor: Colors.transparent,
// isDismissable: true,
// child: SuccessDialog(widget.isFromDashboard),
// );
// }
// } catch (ex) {
// print(ex);
// Utils.hideLoading(context);
// Utils.handleException(ex, context, null);
// }
// }
// }
Future<void> performQrCodeAttendance( {double ? latitude , double ?longitude}) async {
DashBoardProvider dashBoardProvider = Provider.of<DashBoardProvider>(context,listen: false);
var qrCodeValue = await Navigator.of(context).push(
MaterialPageRoute(
builder: (BuildContext context) => QrScannerDialog(),
),
);
if (qrCodeValue != null) {
Utils.showLoading(context);
try {
final swipeModel = Swipe(
swipeTypeValue: SwipeTypeEnum.QR.getIntFromSwipeTypeEnum(),
value: qrCodeValue,
latitude: latitude,
longitude: longitude,
);
log('model i got to scan qr is ${swipeModel.toJson()}');
final swipeResponse = await dashBoardProvider.makeSwipe(model: swipeModel);
log('response of swipe is ${swipeResponse.toJson()}');
bool status = await swipeResponse.data;
Utils.hideLoading(context);
if (swipeResponse.responseCode == 2) {
showDialog(
barrierDismissible: true,
context: context,
builder: (cxt) => ConfirmDialog(
message: swipeResponse.message ?? "",
onTap: () {
Navigator.pop(context);
},
onCloseTap: () {},
),
);
} else {
showMDialog(
context,
backgroundColor: Colors.transparent,
isDismissable: true,
child: SuccessDialog(widget.isFromDashboard),
);
}
} catch (ex) {
log('$ex');
Utils.hideLoading(context);
//this need to confirm where it comes..
// Utils.handleException(ex, context, null);
}
}
}
void markFakeAttendance(String sourceName, String lat, String long) async {
void markFakeAttendance(dynamic sourceName, String lat, String long) async {
Utils.showLoading(context);
try {
// await DashboardApiClient().markFakeLocation(sourceName: sourceName, lat: lat, long: long);
Utils.hideLoading(context);
Utils.confirmDialog(context, "LocaleKeys.fakeLocation.tr()");
} catch (ex) {
print(ex);
log('$ex');
Utils.hideLoading(context);
//Utils.handleException(ex, context, null);
}
@ -651,8 +836,11 @@ class _MarkAttendanceWidgetState extends State<MarkAttendanceWidget> {
begin: Alignment.topRight,
end: Alignment.bottomLeft,
colors: [
//MyColors.gradiantEndColor,
// MyColors.gradiantStartColor,
//ToDo set Colors according to design provided by designer...
Colors.blue,
Colors.green,
// AppColor.gradiantEndColor,
// MyColors.gradiantStartColor,
],
)
: null,
@ -670,6 +858,7 @@ class _MarkAttendanceWidgetState extends State<MarkAttendanceWidget> {
),
).onPress(
() {
log('isEnabled is ${!isEnabled}');
if (!isEnabled) return;
onPress();
},

@ -271,15 +271,15 @@ class _LoginPageState extends State<LoginPage> {
},
),
8.height,
// Align(
// alignment: AlignmentDirectional.centerEnd,
// child: InkWell(
// onTap: () {
// /// TODO [zaid] : push to another screen
// },
// child: context.translation.forgotPassword.bodyText(context).custom(color: AppColor.primary10, fontWeight: FontWeight.w500),
// ),
// ),
Align(
alignment: AlignmentDirectional.centerEnd,
child: InkWell(
onTap: () {
print('i am here...');
},
child: context.translation.forgotPassword.bodyText(context).custom(color: AppColor.primary10, fontWeight: FontWeight.w500),
),
),
Row(
children: [
Checkbox(

@ -96,9 +96,11 @@ class _NfcLayoutState extends State<NfcLayout> {
SizedBox(
height: 30,
),
Image.asset(
"assets/icons/nfc/ic_nfc.png",
"assets/images/nfc_dummy.png",
height: MediaQuery.of(context).size.width / 3,
width: double.infinity,
),
SizedBox(
height: 30,
@ -156,8 +158,10 @@ class _NfcLayoutState extends State<NfcLayout> {
height: 30,
),
Image.asset(
"assets/icons/nfc/ic_done.png",
// "assets/icons/nfc/ic_done.png",
"assets/images/done_dummy.jpeg",
height: MediaQuery.of(context).size.width / 3,
width: double.infinity,
),
SizedBox(
height: 30,

Loading…
Cancel
Save