changes for ios release

design_3.0_task_module_new
SikanderSaleem 5 months ago
parent 6bf9f22af4
commit b29284f59f

2
.gitignore vendored

@ -5,9 +5,11 @@
*.swp *.swp
.DS_Store .DS_Store
.atom/ .atom/
.build/
.buildlog/ .buildlog/
.history .history
.svn/ .svn/
.swiftpm/
migrate_working_dir/ migrate_working_dir/
# IntelliJ related # IntelliJ related

@ -332,7 +332,7 @@ SPEC CHECKSUMS:
flutter_sound: dde9a913063b65a27ba8fdc2039036b99b136c79 flutter_sound: dde9a913063b65a27ba8fdc2039036b99b136c79
flutter_sound_core: 0c6eb9d5268adc70ff159b3d65fd3d98a82d3a27 flutter_sound_core: 0c6eb9d5268adc70ff159b3d65fd3d98a82d3a27
flutter_timezone: ffb07bdad3c6276af8dada0f11978d8a1f8a20bb flutter_timezone: ffb07bdad3c6276af8dada0f11978d8a1f8a20bb
fluttertoast: 723e187574b149e68e63ca4d39b837586b903cfa fluttertoast: e9a18c7be5413da53898f660530c56f35edfba9c
FMDB: 728731dd336af3936ce00f91d9d8495f5718a0e6 FMDB: 728731dd336af3936ce00f91d9d8495f5718a0e6
geolocator_apple: 9bcea1918ff7f0062d98345d238ae12718acfbc1 geolocator_apple: 9bcea1918ff7f0062d98345d238ae12718acfbc1
GoogleDataTransport: aae35b7ea0c09004c3797d53c8c41f66f219d6a7 GoogleDataTransport: aae35b7ea0c09004c3797d53c8c41f66f219d6a7
@ -368,4 +368,4 @@ SPEC CHECKSUMS:
PODFILE CHECKSUM: d8654c27146ad2b7c852fbdd93ef1a3785d9310b PODFILE CHECKSUM: d8654c27146ad2b7c852fbdd93ef1a3785d9310b
COCOAPODS: 1.12.0 COCOAPODS: 1.16.2

@ -18,6 +18,14 @@
<string>Atoms</string> <string>Atoms</string>
<key>CFBundlePackageType</key> <key>CFBundlePackageType</key>
<string>APPL</string> <string>APPL</string>
<key>NFCReaderUsageDescription</key>
<string>Allow permission to use NFC to mark attendance by swiping nfc card.</string>
<key>NSLocationAlwaysAndWhenInUseUsageDescription</key>
<string>This App requires access to your location to mark your attendance.</string>
<key>NSLocationAlwaysUsageDescription</key>
<string>This App requires access to your location to mark your attendance.</string>
<key>NSLocationWhenInUseUsageDescription</key>
<string>This App requires access to your location to mark your attendance.</string>
<key>CFBundleShortVersionString</key> <key>CFBundleShortVersionString</key>
<string>$(FLUTTER_BUILD_NAME)</string> <string>$(FLUTTER_BUILD_NAME)</string>
<key>CFBundleSignature</key> <key>CFBundleSignature</key>
@ -47,11 +55,11 @@
<key>NSSpeechRecognitionUsageDescription</key> <key>NSSpeechRecognitionUsageDescription</key>
<string>This app requires permission for Speech Recognition for speech to text functionality.</string> <string>This app requires permission for Speech Recognition for speech to text functionality.</string>
<key>NSCalendarsUsageDescription</key> <key>NSCalendarsUsageDescription</key>
<string>Access most functions for calendar viewing and editing.</string> <string>Access most functions for calendar viewing and editing.</string>
<key>NSContactsUsageDescription</key> <key>NSContactsUsageDescription</key>
<string>Access contacts for event attendee editing.</string> <string>Access contacts for event attendee editing.</string>
<key>NSCalendarsFullAccessUsageDescription</key> <key>NSCalendarsFullAccessUsageDescription</key>
<string>Access most functions for calendar viewing and editing.</string> <string>Access most functions for calendar viewing and editing.</string>
<key>UIApplicationSupportsIndirectInputEvents</key> <key>UIApplicationSupportsIndirectInputEvents</key>
<true/> <true/>
<key>UIBackgroundModes</key> <key>UIBackgroundModes</key>
@ -88,5 +96,15 @@
<array> <array>
<dict/> <dict/>
</array> </array>
<key>NS</key>
<string></string>
<key>com.apple.developer.nfc.readersession.felica.systemcodes</key>
<array>
<string>0000</string>
</array>
<key>com.apple.developer.nfc.readersession.formats</key>
<array>
<string>TAG</string>
</array>
</dict> </dict>
</plist> </plist>

@ -10,7 +10,6 @@
<true/> <true/>
<key>com.apple.developer.nfc.readersession.formats</key> <key>com.apple.developer.nfc.readersession.formats</key>
<array> <array>
<string>NDEF</string>
<string>TAG</string> <string>TAG</string>
</array> </array>
<key>inter-app-audio</key> <key>inter-app-audio</key>

@ -1,5 +1,4 @@
import 'dart:convert'; import 'dart:convert';
import 'dart:developer';
import 'dart:io'; import 'dart:io';
import 'package:firebase_messaging/firebase_messaging.dart'; import 'package:firebase_messaging/firebase_messaging.dart';
@ -7,14 +6,11 @@ import 'package:flutter/material.dart';
import 'package:google_api_availability/google_api_availability.dart'; import 'package:google_api_availability/google_api_availability.dart';
import 'package:huawei_push/huawei_push.dart' as h_push; import 'package:huawei_push/huawei_push.dart' as h_push;
import 'package:test_sa/controllers/notification/notification_manger.dart'; import 'package:test_sa/controllers/notification/notification_manger.dart';
import 'package:test_sa/extensions/widget_extensions.dart';
import 'package:test_sa/models/all_requests_and_count_model.dart';
import 'package:test_sa/models/device/device_transfer.dart'; import 'package:test_sa/models/device/device_transfer.dart';
import 'package:test_sa/models/new_models/gas_refill_model.dart'; import 'package:test_sa/models/new_models/gas_refill_model.dart';
import 'package:test_sa/modules/cm_module/views/service_request_detail_main_view.dart'; import 'package:test_sa/modules/cm_module/views/service_request_detail_main_view.dart';
import 'package:test_sa/modules/pm_module/ppm_wo/ppm_details_page.dart'; import 'package:test_sa/modules/pm_module/ppm_wo/ppm_details_page.dart';
import 'package:test_sa/modules/pm_module/recurrent_wo/recurrent_work_order_view.dart'; import 'package:test_sa/modules/pm_module/recurrent_wo/recurrent_work_order_view.dart';
import 'package:test_sa/modules/tm_module/tasks_wo/task_request_detail_view.dart';
import 'package:test_sa/views/pages/device_transfer/device_transfer_details.dart'; import 'package:test_sa/views/pages/device_transfer/device_transfer_details.dart';
import 'package:test_sa/views/pages/user/gas_refill/gas_refill_details.dart'; import 'package:test_sa/views/pages/user/gas_refill/gas_refill_details.dart';
import 'package:test_sa/views/widgets/loaders/no_data_found.dart'; import 'package:test_sa/views/widgets/loaders/no_data_found.dart';
@ -73,12 +69,16 @@ class FirebaseNotificationManger {
} }
static Future<bool> isGoogleServicesAvailable() async { static Future<bool> isGoogleServicesAvailable() async {
GooglePlayServicesAvailability availability = await GoogleApiAvailability.instance.checkGooglePlayServicesAvailability(); try {
String status = availability.toString().split('.').last; GooglePlayServicesAvailability availability = await GoogleApiAvailability.instance.checkGooglePlayServicesAvailability();
if (status == "success") { String status = availability.toString().split('.').last;
return true; if (status == "success") {
return true;
}
return false;
} catch (ex) {
return false;
} }
return false;
} }
static void handleMessage(context, Map<String, dynamic> messageData) { static void handleMessage(context, Map<String, dynamic> messageData) {
@ -95,11 +95,11 @@ class FirebaseNotificationManger {
case 1: case 1:
serviceClass = PpmDetailsPage(requestId: int.parse(messageData["requestNumber"].toString())); serviceClass = PpmDetailsPage(requestId: int.parse(messageData["requestNumber"].toString()));
break; break;
//these three request are same corrective maintenance.... //these three request are same corrective maintenance....
case 3: case 3:
serviceClass = ServiceRequestDetailMain(requestId: messageData["requestNumber"] ?? ''); serviceClass = ServiceRequestDetailMain(requestId: messageData["requestNumber"] ?? '');
break; break;
case 8: case 8:
serviceClass = ServiceRequestDetailMain(requestId: messageData["requestNumber"] ?? ''); serviceClass = ServiceRequestDetailMain(requestId: messageData["requestNumber"] ?? '');
break; break;
case 11: case 11:
@ -117,14 +117,14 @@ class FirebaseNotificationManger {
break; break;
case 12: case 12:
serviceClass = RecurrentWorkOrderView(taskId: int.parse(messageData["requestNumber"].toString())); serviceClass = RecurrentWorkOrderView(taskId: int.parse(messageData["requestNumber"].toString()));
//Didn't handle task request yet... //Didn't handle task request yet...
// case 6: // case 6:
// serviceClass = TaskRequestDetailsView( // serviceClass = TaskRequestDetailsView(
// taskId: int.parse(messageData["requestNumber"].toString()), // taskId: int.parse(messageData["requestNumber"].toString()),
// requestDetails: RequestsDetails(nameOfType: messageData["sourceName"], status: messageData["statusName"], priority: messageData["priorityName"], date: messageData["createdDate"])); // requestDetails: RequestsDetails(nameOfType: messageData["sourceName"], status: messageData["statusName"], priority: messageData["priorityName"], date: messageData["createdDate"]));
// return; // return;
default: default:
serviceClass = const Scaffold(body: Center(child: NoDataFound())); serviceClass = const Scaffold(body: Center(child: NoDataFound()));
} }
// if (messageData["requestType"] == "Service request to engineer") { // if (messageData["requestType"] == "Service request to engineer") {
@ -144,12 +144,12 @@ class FirebaseNotificationManger {
// //
// } // }
Navigator.of(context).push(MaterialPageRoute(builder: (_) => serviceClass!)); Navigator.of(context).push(MaterialPageRoute(builder: (_) => serviceClass!));
} }
} }
static initialized(BuildContext context) async { static initialized(BuildContext context) async {
//TOD0 add platform check here also //TOD0 add platform check here also
if (!(await isGoogleServicesAvailable())) { if (!(await isGoogleServicesAvailable()) && Platform.isAndroid) {
var initialNotification = await h_push.Push.getInitialNotification(); var initialNotification = await h_push.Push.getInitialNotification();
if (initialNotification != null) { if (initialNotification != null) {
Map<String, dynamic> remoteData = Map<String, dynamic>.from(initialNotification["extras"] as Map); Map<String, dynamic> remoteData = Map<String, dynamic>.from(initialNotification["extras"] as Map);

@ -84,8 +84,6 @@ class _DashboardViewState extends State<DashboardView> {
}); });
} }
void handleScroll() async { void handleScroll() async {
_scrollController = ScrollController(); _scrollController = ScrollController();
_scrollController.addListener(() async { _scrollController.addListener(() async {
@ -134,41 +132,40 @@ class _DashboardViewState extends State<DashboardView> {
), ),
), ),
), ),
if (user!=null&&user.employeeIsHMG==false) if (user != null && user.employeeIsHMG == false)
Positioned( Positioned(
right: 20.toScreenWidth , right: 20.toScreenWidth,
bottom: 20.toScreenHeight, bottom: 20.toScreenHeight,
child: GestureDetector( child: GestureDetector(
onTap: () async { onTap: () async {
bool isNfcSupported = await NfcManager.instance.isAvailable(); bool isNfcSupported = await NfcManager.instance.isAvailable();
SwipeGeneralUtils.instance.showSwipeTypeBottomSheetSheet(isNfcSupported: isNfcSupported); SwipeGeneralUtils.instance.showSwipeTypeBottomSheetSheet(isNfcSupported: isNfcSupported);
}, },
child: CircularAnimatedContainer(child: Container( child: CircularAnimatedContainer(
width: 100.toScreenWidth, child: Container(
height: 100.toScreenHeight, width: 100.toScreenWidth,
decoration: BoxDecoration( height: 100.toScreenHeight,
shape: BoxShape.circle, decoration: BoxDecoration(
color: AppColor.white10, shape: BoxShape.circle,
border: Border.all(color: AppColor.primary10.withOpacity(0.5), width: 2), color: AppColor.white10,
border: Border.all(color: AppColor.primary10.withOpacity(0.5), width: 2),
),
child: Consumer<UserProvider>(builder: (context, userProvider, child) {
return Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
'swipe'.toSvgAsset(width: 32, height: 32),
8.height,
Text(
("${context.translation.checkIn}\n${userProvider.swipeTransactionModel.swipeTime != null ? SwipeGeneralUtils.instance.formatTimeOnly(userProvider.swipeTransactionModel.swipeTime!) : '--:--'}"),
style: AppTextStyles.bodyText2.copyWith(color: AppColor.white936, fontWeight: FontWeight.w500, fontFamily: "Poppins"),
),
],
);
}),
), ),
child: Consumer<UserProvider>( ),
builder: (context, userProvider,child) {
return Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
'swipe'.toSvgAsset(width: 32, height: 32),
8.height,
Text(
("${context.translation.checkIn}\n${userProvider.swipeTransactionModel.swipeTime != null ? SwipeGeneralUtils.instance.formatTimeOnly(userProvider.swipeTransactionModel.swipeTime!) : '--:--'}"),
style: AppTextStyles.bodyText2.copyWith(color: AppColor.white936, fontWeight: FontWeight.w500, fontFamily: "Poppins"),
),
],
);
}
),
),),
), ),
), ),
], ],

@ -22,7 +22,7 @@ class LocationUtilities {
static bool _listeningSettingChange = true; static bool _listeningSettingChange = true;
static void listenGPS({bool change = true, Function(bool) ?onChange}) async { static void listenGPS({bool change = true, Function(bool)? onChange}) async {
_listeningSettingChange = change; _listeningSettingChange = change;
if (change == false) return; if (change == false) return;
@ -46,22 +46,59 @@ class LocationUtilities {
} }
static void getCurrentLocation(Function(Position position, bool isMocked) callback, Function errorCallBack, BuildContext context) { static void getCurrentLocation(Function(Position position, bool isMocked) callback, Function errorCallBack, BuildContext context) {
void done(Position position) { Geolocator.getCurrentPosition(desiredAccuracy: LocationAccuracy.medium, timeLimit: const Duration(seconds: 5)).then((position) {
//AppStorage.sp.saveLocation(position);
bool isMocked = position.isMocked; bool isMocked = position.isMocked;
callback(position, isMocked); callback(position, isMocked);
} }).catchError((err) {
errorCallBack();
locationFun((granted) { });
if (granted) { // return;
Geolocator.getCurrentPosition(desiredAccuracy: LocationAccuracy.medium, timeLimit: const Duration(seconds: 5)).then((value) { // Permission.location.isGranted.then((isGranted) {
done(value); // if (!isGranted) {
}).catchError((err) { // Permission.location.request().then((granted) {
errorCallBack(); // print("granted:$granted");
}); // if (granted == PermissionStatus.granted) {
} else { // Geolocator.getCurrentPosition(desiredAccuracy: LocationAccuracy.medium, timeLimit: const Duration(seconds: 5)).then((position) {
// AppPermissions // bool isMocked = position.isMocked;
} // callback(position, isMocked);
}, context); // }).catchError((err) {
// print("getCurrentPositionError:$err");
// errorCallBack();
// });
// } else {
// errorCallBack();
// }
// });
// } else {
// Geolocator.getCurrentPosition(desiredAccuracy: LocationAccuracy.medium, timeLimit: const Duration(seconds: 5)).then((position) {
// bool isMocked = position.isMocked;
// callback(position, isMocked);
// }).catchError((err) {
// print("getCurrentPositionError:$err");
// errorCallBack();
// });
// }
// });
//
// // Geolocator.getCurrentPosition(desiredAccuracy: LocationAccuracy.medium, timeLimit: const Duration(seconds: 5)).then((position) {
// // bool isMocked = position.isMocked;
// // callback(position, isMocked);
// // }).catchError((err) {
// // print("getCurrentPositionError:$err");
// // errorCallBack();
// // });
//
// // locationFun((granted) {
// // if (granted) {
// // Geolocator.getCurrentPosition(desiredAccuracy: LocationAccuracy.medium, timeLimit: const Duration(seconds: 5)).then((value) {
// // done(value);
// // }).catchError((err) {
// // print("getCurrentPositionError:$err");
// // errorCallBack();
// // });
// // } else {
// // // AppPermissions
// // }
// // }, context);
} }
} }

@ -85,14 +85,14 @@ class SwipeGeneralUtils {
); );
} }
void showErrorDialog({String ?message, required BuildContext context}) { void showErrorDialog({String? message, required BuildContext context}) {
showDialog( showDialog(
context: context, context: context,
builder: (context) => ConfirmDialog(message: message, title: 'Error', onTap: () => Navigator.pop(context)), builder: (context) => ConfirmDialog(message: message, title: 'Error', onTap: () => Navigator.pop(context)),
); );
} }
void showMDialog(context, {Widget ?child, Color? backgroundColor, bool isDismissable = true, bool isBusniessCard = false}) async { void showMDialog(context, {Widget? child, Color? backgroundColor, bool isDismissable = true, bool isBusniessCard = false}) async {
return showDialog( return showDialog(
context: context, context: context,
barrierDismissible: isDismissable, barrierDismissible: isDismissable,
@ -137,7 +137,7 @@ class SwipeGeneralUtils {
} }
//huawei permission part.... //huawei permission part....
void getHuaweiCurrentLocation({SwipeTypeEnum ?attendanceType, required BuildContext context}) async { void getHuaweiCurrentLocation({SwipeTypeEnum? attendanceType, required BuildContext context}) async {
try { try {
showLoading(context); showLoading(context);
FusedLocationProviderClient locationService = FusedLocationProviderClient()..initFusedLocationService(); FusedLocationProviderClient locationService = FusedLocationProviderClient()..initFusedLocationService();
@ -153,7 +153,7 @@ class SwipeGeneralUtils {
(Location location) async { (Location location) async {
hideLoading(context); hideLoading(context);
await locationService.removeLocationUpdates(requestCode); await locationService.removeLocationUpdates(requestCode);
handleSwipeOperation(swipeType: attendanceType!, context: context, lat: location.latitude??0, long: location.longitude??0); handleSwipeOperation(swipeType: attendanceType!, context: context, lat: location.latitude ?? 0, long: location.longitude ?? 0);
requestCode = 0; requestCode = 0;
_streamSubscription.cancel(); _streamSubscription.cancel();
}, },
@ -173,7 +173,7 @@ class SwipeGeneralUtils {
return (result[Permission.location] == PermissionStatus.granted || result[Permission.locationAlways] == PermissionStatus.granted); return (result[Permission.location] == PermissionStatus.granted || result[Permission.locationAlways] == PermissionStatus.granted);
} }
void checkHuaweiLocationPermission({required SwipeTypeEnum attendanceType,required BuildContext context}) async { void checkHuaweiLocationPermission({required SwipeTypeEnum attendanceType, required BuildContext context}) async {
// Permission_Handler permissionHandler = PermissionHandler(); // Permission_Handler permissionHandler = PermissionHandler();
LocationUtilities.isEnabled((bool isEnabled) async { LocationUtilities.isEnabled((bool isEnabled) async {
if (isEnabled) { if (isEnabled) {
@ -231,7 +231,7 @@ class SwipeGeneralUtils {
// } // }
} }
void handleSwipeOperation({required SwipeTypeEnum swipeType,required double lat,required double long,required BuildContext context}) { void handleSwipeOperation({required SwipeTypeEnum swipeType, required double lat, required double long, required BuildContext context}) {
switch (swipeType) { switch (swipeType) {
case SwipeTypeEnum.NFC: case SwipeTypeEnum.NFC:
handleNfcAttendance(latitude: lat, longitude: long, context: context); handleNfcAttendance(latitude: lat, longitude: long, context: context);
@ -249,7 +249,7 @@ class SwipeGeneralUtils {
return DateFormat.Hms().format(dateTime); return DateFormat.Hms().format(dateTime);
} }
Future<void> performQrCodeAttendance({double ?latitude, double? longitude,required BuildContext context}) async { Future<void> performQrCodeAttendance({double? latitude, double? longitude, required BuildContext context}) async {
UserProvider userProvider = Provider.of<UserProvider>(context, listen: false); UserProvider userProvider = Provider.of<UserProvider>(context, listen: false);
String qrCodeValue = await Navigator.of(context).push( String qrCodeValue = await Navigator.of(context).push(
@ -267,7 +267,7 @@ class SwipeGeneralUtils {
); );
await userProvider.makeSwipe(model: swipeModel).then((swipeResponse) { await userProvider.makeSwipe(model: swipeModel).then((swipeResponse) {
if (swipeResponse.isSuccess==true) { if (swipeResponse.isSuccess == true) {
hideLoading(context); hideLoading(context);
Navigator.pushNamed(context, SwipeSuccessView.routeName); Navigator.pushNamed(context, SwipeSuccessView.routeName);
} else { } else {
@ -294,7 +294,7 @@ class SwipeGeneralUtils {
} }
} }
Future<void> handleNfcAttendance({double ?latitude = 0, double? longitude = 0,required BuildContext context}) async { Future<void> handleNfcAttendance({double? latitude = 0, double? longitude = 0, required BuildContext context}) async {
// UserProvider _userProvider = Provider.of<UserProvider>(context,listen:false); // UserProvider _userProvider = Provider.of<UserProvider>(context,listen:false);
if (Platform.isIOS) { if (Platform.isIOS) {
@ -310,8 +310,8 @@ class SwipeGeneralUtils {
Future<void> _processNfcAttendance( Future<void> _processNfcAttendance(
String nfcId, String nfcId,
double ?latitude, double? latitude,
double ?longitude, double? longitude,
BuildContext context, BuildContext context,
) async { ) async {
showLoading(context); showLoading(context);
@ -321,7 +321,7 @@ class SwipeGeneralUtils {
final swipeResponse = await userProvider.makeSwipe(model: swipeModel); final swipeResponse = await userProvider.makeSwipe(model: swipeModel);
if (swipeResponse.isSuccess==true) { if (swipeResponse.isSuccess == true) {
hideLoading(context); hideLoading(context);
Navigator.pushNamed(context, SwipeSuccessView.routeName); Navigator.pushNamed(context, SwipeSuccessView.routeName);
} else { } else {
@ -405,7 +405,7 @@ class SwipeGeneralUtils {
}, context)); }, context));
} }
if (kDebugMode) { if (kDebugMode) {
userProvider.user!.enableWifi!= true; userProvider.user!.enableWifi != true;
} }
if (userProvider.user!.enableWifi!) { if (userProvider.user!.enableWifi!) {
@ -448,7 +448,7 @@ class SwipeGeneralUtils {
); );
} }
void readNFc({Function(String) ?onRead}) { void readNFc({Function(String)? onRead}) {
NfcManager.instance.startSession(onDiscovered: (NfcTag tag) async { NfcManager.instance.startSession(onDiscovered: (NfcTag tag) async {
MifareUltralight f; MifareUltralight f;
if (Platform.isAndroid) { if (Platform.isAndroid) {
@ -497,7 +497,7 @@ class SwipeGeneralUtils {
final swipeResponse = await userProvider.makeSwipe(model: swipeModel); final swipeResponse = await userProvider.makeSwipe(model: swipeModel);
await closeWifiRequest(); await closeWifiRequest();
if (swipeResponse.isSuccess==true) { if (swipeResponse.isSuccess == true) {
hideLoading(context); hideLoading(context);
Navigator.pushNamed(context, SwipeSuccessView.routeName); Navigator.pushNamed(context, SwipeSuccessView.routeName);
} else { } else {

Loading…
Cancel
Save