From 0a06ad9fe3992b750be24ebf27a5cb6821cd7fad Mon Sep 17 00:00:00 2001 From: Sikander Saleem Date: Wed, 26 Feb 2025 10:34:30 +0300 Subject: [PATCH 1/3] privacy policy check added. --- lib/new_views/pages/login_page.dart | 180 ++++++---------------------- 1 file changed, 38 insertions(+), 142 deletions(-) diff --git a/lib/new_views/pages/login_page.dart b/lib/new_views/pages/login_page.dart index d572344b..53ac8d78 100644 --- a/lib/new_views/pages/login_page.dart +++ b/lib/new_views/pages/login_page.dart @@ -1,143 +1,4 @@ -//older code... - -// import 'package:flutter/material.dart'; -// import 'package:fluttertoast/fluttertoast.dart'; -// import 'package:provider/provider.dart'; -// import 'package:shared_preferences/shared_preferences.dart'; -// import 'package:test_sa/controllers/providers/settings/app_settings.dart'; -// import 'package:test_sa/extensions/context_extension.dart'; -// import 'package:test_sa/extensions/int_extensions.dart'; -// import 'package:test_sa/extensions/text_extensions.dart'; -// import 'package:test_sa/extensions/widget_extensions.dart'; -// import 'package:test_sa/new_views/app_style/app_color.dart'; -// import 'package:test_sa/new_views/pages/land_page/land_page.dart'; -// -// import '../../controllers/providers/api/user_provider.dart'; -// import '../../controllers/providers/settings/setting_provider.dart'; -// import '../../controllers/validator/validator.dart'; -// import '../../models/user.dart'; -// import '../common_widgets/app_filled_button.dart'; -// import '../common_widgets/app_text_form_field.dart'; -// -// class LoginPage extends StatefulWidget { -// static const String routeName = "/login_page"; -// -// const LoginPage({Key? key}) : super(key: key); -// -// @override -// State createState() => _LoginPageState(); -// } -// -// class _LoginPageState extends State { -// final User _user = User(); -// UserProvider _userProvider; -// SettingProvider _settingProvider; -// final GlobalKey _formKey = GlobalKey(); -// -// bool rememberMe = false; -// -// @override -// Widget build(BuildContext context) { -// _userProvider = Provider.of(context); -// if (_settingProvider == null) { -// _settingProvider = Provider.of(context); -// rememberMe = _settingProvider.rememberMe; -// if (rememberMe) { -// _user.userName = _settingProvider.username; -// _user.password = _settingProvider.password; -// } -// } -// -// return Form( -// key: _formKey, -// child: Scaffold( -// body: Column( -// children: [ -// SingleChildScrollView( -// child: Column( -// mainAxisAlignment: MainAxisAlignment.center, -// crossAxisAlignment: CrossAxisAlignment.start, -// children: [ -// Hero(tag: "logo", child: "logo".toSvgAsset(height: 64)), -// 64.height, -// context.translation.login.heading2(context).custom(fontWeight: FontWeight.w600, color: context.isDark ? AppColor.primary50 : AppColor.neutral50), -// context.translation.enterCredsToLogin.heading6(context).custom(color: context.isDark ? AppColor.neutral10 : AppColor.neutral20), -// 32.height, -// AppTextFormField( -// initialValue: _user?.userName, -// validator: (value) => Validator.hasValue(value) ? null : context.translation.requiredField, -// labelText: context.translation.username, -// textInputType: TextInputType.text, -// onSaved: (value) { -// _user.userName = value; -// }, -// ), -// 16.height, -// AppTextFormField( -// initialValue: _user?.password, -// labelText: context.translation.password, -// obscureText: true, -// validator: (value) => Validator.isValidPassword(value) -// ? null -// : value.isEmpty -// ? context.translation.requiredField -// : context.translation.passwordLengthMessage, -// onSaved: (value) { -// _user.password = value; -// }, -// ), -// 8.height, -// Row( -// children: [ -// Checkbox( -// value: rememberMe, -// activeColor: AppColor.blueStatus(context), -// onChanged: (value) { -// setState(() { -// rememberMe = value; -// }); -// }), -// "Remember Me".bodyText(context).custom(color: context.isDark ? AppColor.primary50 : AppColor.neutral50).expanded, -// ], -// ), -// 16.height, -// Align( -// alignment: AlignmentDirectional.centerEnd, -// child: InkWell( -// onTap: () { -// /// TODO [zaid] : push to another screen -// }, -// child: context.translation.forgotPassword.bodyText(context).custom(color: AppColor.primary50, fontWeight: FontWeight.w500), -// ), -// ), -// ], -// ), -// ).center.expanded, -// AppFilledButton(label: context.translation.login, maxWidth: true, onPressed: _login), -// ], -// ).paddingOnly(start: 16, end: 16, bottom: 24, top: 24), -// ), -// ); -// } -// -// Future _login() async { -// if (!_formKey.currentState.validate()) return; -// _formKey.currentState.save(); -// int status = await _userProvider.login(context: context, user: _user); -// if (status >= 200 && status < 300 && _userProvider.user.isAuthenticated ?? false) { -// await _settingProvider.setUser(_userProvider.user); -// (await SharedPreferences.getInstance()).remove(ASettings.localAuth); -// await _settingProvider.setRememberMe(_user.userName, _user.password, rememberMe); -// -// /// The below line for the new design -// // Navigator.pushNamed(context, LandPage.routeName); -// Navigator.pushNamed(context, LandPage.routeName); -// } else { -// Fluttertoast.showToast(msg: _userProvider.user?.message ?? context.translation.failedToCompleteRequest); -// } -// } -// } - +import 'package:flutter/gestures.dart'; import 'package:flutter/material.dart'; import 'package:fluttertoast/fluttertoast.dart'; import 'package:provider/provider.dart'; @@ -147,12 +8,14 @@ import 'package:test_sa/controllers/notification/firebase_notification_manger.da import 'package:test_sa/controllers/providers/settings/app_settings.dart'; import 'package:test_sa/extensions/context_extension.dart'; import 'package:test_sa/extensions/int_extensions.dart'; +import 'package:test_sa/extensions/string_extensions.dart'; import 'package:test_sa/extensions/text_extensions.dart'; import 'package:test_sa/extensions/widget_extensions.dart'; import 'package:test_sa/models/new_models/general_response_model.dart'; import 'package:test_sa/new_views/app_style/app_color.dart'; import 'package:test_sa/new_views/forget_password_module/forget_passwod_verify_otp.dart'; import 'package:test_sa/new_views/pages/land_page/land_page.dart'; +import 'package:url_launcher/url_launcher.dart'; import '../../controllers/providers/api/user_provider.dart'; import '../../controllers/providers/settings/setting_provider.dart'; @@ -178,6 +41,7 @@ class _LoginPageState extends State { TextEditingController userNameController = TextEditingController(); bool _passwordVisible = false; bool rememberMe = false; + bool privacyPolicyChecked = false; @override void initState() { @@ -228,7 +92,6 @@ class _LoginPageState extends State { context.translation.signInToYour.customHeadingText(context).custom(color: Colors.white, fontSize: 27, fontWeight: FontWeight.w500), context.translation.account.customHeadingText(context).custom(color: Colors.white, fontSize: 27, fontWeight: FontWeight.w500), 15.height, - // context.translation.letSignInToAccount.customHeadingText(context).custom(color: Colors.white, fontWeight: FontWeight.w500, fontSize: 12), ], ), ), @@ -320,7 +183,35 @@ class _LoginPageState extends State { "Remember Me".bodyText(context).custom(color: context.isDark ? AppColor.primary50 : AppColor.neutral50).expanded, ], ), - 50.height, + Row( + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + Checkbox( + value: privacyPolicyChecked, + activeColor: AppColor.blueStatus(context), + materialTapTargetSize: MaterialTapTargetSize.shrinkWrap, + onChanged: (value) { + if (value == null) return; + privacyPolicyChecked = value; + setState(() {}); + }), + RichText( + text: TextSpan(text: "I have read and agree to ", style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.primary50 : AppColor.neutral50), children: [ + TextSpan( + text: "Privacy Policy", + style: AppTextStyles.bodyText.copyWith(color: AppColor.blueStatus(context), decoration: TextDecoration.underline), + recognizer: TapGestureRecognizer() + ..onTap = () async { + Uri uri = Uri.parse("https://cloudsolutions.com.sa/en/privacy-policy"); + try { + launchUrl(uri); + } catch (ex) {} + }), + ]), + ).expanded, + ], + ), + 16.height, AppFilledButton(label: context.translation.signIn, buttonColor: AppColor.primary10, maxWidth: true, onPressed: _login), ], ), @@ -333,6 +224,11 @@ class _LoginPageState extends State { Future _login() async { if (!_formKey.currentState!.validate()) return; + + if (privacyPolicyChecked == false) { + "You must agree privacy policy".showToast; + return; + } _formKey.currentState!.save(); int status = await _userProvider.login(context: context, user: _user); if (status >= 200 && status < 300 && _userProvider.user!.isAuthenticated! ?? false) { From f6db013495c3d574d5e8918064ffe2a39d879a4b Mon Sep 17 00:00:00 2001 From: Sikander Saleem Date: Sun, 2 Mar 2025 10:55:04 +0300 Subject: [PATCH 2/3] ios build provided to QA team --- ios/Podfile.lock | 331 ------------------- ios/Runner.plist/GeneratedPluginRegistrant.m | 6 - ios/Runner.xcodeproj/project.pbxproj | 102 +++--- pubspec.lock | 8 +- pubspec.yaml | 2 +- 5 files changed, 50 insertions(+), 399 deletions(-) delete mode 100644 ios/Podfile.lock diff --git a/ios/Podfile.lock b/ios/Podfile.lock deleted file mode 100644 index dd268e0a..00000000 --- a/ios/Podfile.lock +++ /dev/null @@ -1,331 +0,0 @@ -PODS: - - audioplayers_darwin (0.0.1): - - Flutter - - device_calendar (0.0.1): - - Flutter - - DKImagePickerController/Core (4.3.9): - - DKImagePickerController/ImageDataManager - - DKImagePickerController/Resource - - DKImagePickerController/ImageDataManager (4.3.9) - - DKImagePickerController/PhotoGallery (4.3.9): - - DKImagePickerController/Core - - DKPhotoGallery - - DKImagePickerController/Resource (4.3.9) - - DKPhotoGallery (0.0.19): - - DKPhotoGallery/Core (= 0.0.19) - - DKPhotoGallery/Model (= 0.0.19) - - DKPhotoGallery/Preview (= 0.0.19) - - DKPhotoGallery/Resource (= 0.0.19) - - SDWebImage - - SwiftyGif - - DKPhotoGallery/Core (0.0.19): - - DKPhotoGallery/Model - - DKPhotoGallery/Preview - - SDWebImage - - SwiftyGif - - DKPhotoGallery/Model (0.0.19): - - SDWebImage - - SwiftyGif - - DKPhotoGallery/Preview (0.0.19): - - DKPhotoGallery/Model - - DKPhotoGallery/Resource - - SDWebImage - - SwiftyGif - - DKPhotoGallery/Resource (0.0.19): - - SDWebImage - - SwiftyGif - - file_picker (0.0.1): - - DKImagePickerController/PhotoGallery - - Flutter - - Firebase/CoreOnly (11.2.0): - - FirebaseCore (= 11.2.0) - - Firebase/Messaging (11.2.0): - - Firebase/CoreOnly - - FirebaseMessaging (~> 11.2.0) - - firebase_core (3.6.0): - - Firebase/CoreOnly (= 11.2.0) - - Flutter - - firebase_messaging (15.1.3): - - Firebase/Messaging (= 11.2.0) - - firebase_core - - Flutter - - FirebaseCore (11.2.0): - - FirebaseCoreInternal (~> 11.0) - - GoogleUtilities/Environment (~> 8.0) - - GoogleUtilities/Logger (~> 8.0) - - FirebaseCoreInternal (11.4.2): - - "GoogleUtilities/NSData+zlib (~> 8.0)" - - FirebaseInstallations (11.4.0): - - FirebaseCore (~> 11.0) - - GoogleUtilities/Environment (~> 8.0) - - GoogleUtilities/UserDefaults (~> 8.0) - - PromisesObjC (~> 2.4) - - FirebaseMessaging (11.2.0): - - FirebaseCore (~> 11.0) - - FirebaseInstallations (~> 11.0) - - GoogleDataTransport (~> 10.0) - - GoogleUtilities/AppDelegateSwizzler (~> 8.0) - - GoogleUtilities/Environment (~> 8.0) - - GoogleUtilities/Reachability (~> 8.0) - - GoogleUtilities/UserDefaults (~> 8.0) - - nanopb (~> 3.30910.0) - - Flutter (1.0.0) - - flutter_keyboard_visibility (0.0.1): - - Flutter - - flutter_local_notifications (0.0.1): - - Flutter - - flutter_sound (9.6.0): - - Flutter - - flutter_sound_core (= 9.6.0) - - flutter_sound_core (9.6.0) - - flutter_timezone (0.0.1): - - Flutter - - fluttertoast (0.0.2): - - Flutter - - Toast - - FMDB (2.7.12): - - FMDB/standard (= 2.7.12) - - FMDB/Core (2.7.12) - - FMDB/standard (2.7.12): - - FMDB/Core - - GoogleDataTransport (10.1.0): - - nanopb (~> 3.30910.0) - - PromisesObjC (~> 2.4) - - GoogleUtilities/AppDelegateSwizzler (8.0.2): - - GoogleUtilities/Environment - - GoogleUtilities/Logger - - GoogleUtilities/Network - - GoogleUtilities/Privacy - - GoogleUtilities/Environment (8.0.2): - - GoogleUtilities/Privacy - - GoogleUtilities/Logger (8.0.2): - - GoogleUtilities/Environment - - GoogleUtilities/Privacy - - GoogleUtilities/Network (8.0.2): - - GoogleUtilities/Logger - - "GoogleUtilities/NSData+zlib" - - GoogleUtilities/Privacy - - GoogleUtilities/Reachability - - "GoogleUtilities/NSData+zlib (8.0.2)": - - GoogleUtilities/Privacy - - GoogleUtilities/Privacy (8.0.2) - - GoogleUtilities/Reachability (8.0.2): - - GoogleUtilities/Logger - - GoogleUtilities/Privacy - - GoogleUtilities/UserDefaults (8.0.2): - - GoogleUtilities/Logger - - GoogleUtilities/Privacy - - image_cropper (0.0.4): - - Flutter - - TOCropViewController (~> 2.7.4) - - image_picker_ios (0.0.1): - - Flutter - - local_auth_darwin (0.0.1): - - Flutter - - FlutterMacOS - - MTBBarcodeScanner (5.0.11) - - nanopb (3.30910.0): - - nanopb/decode (= 3.30910.0) - - nanopb/encode (= 3.30910.0) - - nanopb/decode (3.30910.0) - - nanopb/encode (3.30910.0) - - open_file_ios (0.0.1): - - Flutter - - package_info (0.0.1): - - Flutter - - path_provider_foundation (0.0.1): - - Flutter - - FlutterMacOS - - permission_handler_apple (9.3.0): - - Flutter - - pointer_interceptor_ios (0.0.1): - - Flutter - - PromisesObjC (2.4.0) - - qr_code_scanner (0.2.0): - - Flutter - - MTBBarcodeScanner - - record_mp3_plus (1.0.0): - - Flutter - - rive_common (0.0.1): - - Flutter - - SDWebImage (5.19.7): - - SDWebImage/Core (= 5.19.7) - - SDWebImage/Core (5.19.7) - - share (0.0.1): - - Flutter - - shared_preferences_foundation (0.0.1): - - Flutter - - FlutterMacOS - - speech_to_text (0.0.1): - - Flutter - - FlutterMacOS - - Try - - sqflite (0.0.3): - - Flutter - - FlutterMacOS - - SwiftyGif (5.4.5) - - Toast (4.1.1) - - TOCropViewController (2.7.4) - - Try (2.1.1) - - url_launcher_ios (0.0.1): - - Flutter - -DEPENDENCIES: - - audioplayers_darwin (from `.symlinks/plugins/audioplayers_darwin/ios`) - - device_calendar (from `.symlinks/plugins/device_calendar/ios`) - - file_picker (from `.symlinks/plugins/file_picker/ios`) - - firebase_core (from `.symlinks/plugins/firebase_core/ios`) - - firebase_messaging (from `.symlinks/plugins/firebase_messaging/ios`) - - Flutter (from `Flutter`) - - flutter_keyboard_visibility (from `.symlinks/plugins/flutter_keyboard_visibility/ios`) - - flutter_local_notifications (from `.symlinks/plugins/flutter_local_notifications/ios`) - - flutter_sound (from `.symlinks/plugins/flutter_sound/ios`) - - flutter_timezone (from `.symlinks/plugins/flutter_timezone/ios`) - - fluttertoast (from `.symlinks/plugins/fluttertoast/ios`) - - FMDB - - image_cropper (from `.symlinks/plugins/image_cropper/ios`) - - image_picker_ios (from `.symlinks/plugins/image_picker_ios/ios`) - - local_auth_darwin (from `.symlinks/plugins/local_auth_darwin/darwin`) - - open_file_ios (from `.symlinks/plugins/open_file_ios/ios`) - - package_info (from `.symlinks/plugins/package_info/ios`) - - path_provider_foundation (from `.symlinks/plugins/path_provider_foundation/darwin`) - - permission_handler_apple (from `.symlinks/plugins/permission_handler_apple/ios`) - - pointer_interceptor_ios (from `.symlinks/plugins/pointer_interceptor_ios/ios`) - - qr_code_scanner (from `.symlinks/plugins/qr_code_scanner/ios`) - - record_mp3_plus (from `.symlinks/plugins/record_mp3_plus/ios`) - - rive_common (from `.symlinks/plugins/rive_common/ios`) - - share (from `.symlinks/plugins/share/ios`) - - shared_preferences_foundation (from `.symlinks/plugins/shared_preferences_foundation/darwin`) - - speech_to_text (from `.symlinks/plugins/speech_to_text/darwin`) - - sqflite (from `.symlinks/plugins/sqflite/darwin`) - - url_launcher_ios (from `.symlinks/plugins/url_launcher_ios/ios`) - -SPEC REPOS: - trunk: - - DKImagePickerController - - DKPhotoGallery - - Firebase - - FirebaseCore - - FirebaseCoreInternal - - FirebaseInstallations - - FirebaseMessaging - - flutter_sound_core - - FMDB - - GoogleDataTransport - - GoogleUtilities - - MTBBarcodeScanner - - nanopb - - PromisesObjC - - SDWebImage - - SwiftyGif - - Toast - - TOCropViewController - - Try - -EXTERNAL SOURCES: - audioplayers_darwin: - :path: ".symlinks/plugins/audioplayers_darwin/ios" - device_calendar: - :path: ".symlinks/plugins/device_calendar/ios" - file_picker: - :path: ".symlinks/plugins/file_picker/ios" - firebase_core: - :path: ".symlinks/plugins/firebase_core/ios" - firebase_messaging: - :path: ".symlinks/plugins/firebase_messaging/ios" - Flutter: - :path: Flutter - flutter_keyboard_visibility: - :path: ".symlinks/plugins/flutter_keyboard_visibility/ios" - flutter_local_notifications: - :path: ".symlinks/plugins/flutter_local_notifications/ios" - flutter_sound: - :path: ".symlinks/plugins/flutter_sound/ios" - flutter_timezone: - :path: ".symlinks/plugins/flutter_timezone/ios" - fluttertoast: - :path: ".symlinks/plugins/fluttertoast/ios" - image_cropper: - :path: ".symlinks/plugins/image_cropper/ios" - image_picker_ios: - :path: ".symlinks/plugins/image_picker_ios/ios" - local_auth_darwin: - :path: ".symlinks/plugins/local_auth_darwin/darwin" - open_file_ios: - :path: ".symlinks/plugins/open_file_ios/ios" - package_info: - :path: ".symlinks/plugins/package_info/ios" - path_provider_foundation: - :path: ".symlinks/plugins/path_provider_foundation/darwin" - permission_handler_apple: - :path: ".symlinks/plugins/permission_handler_apple/ios" - pointer_interceptor_ios: - :path: ".symlinks/plugins/pointer_interceptor_ios/ios" - qr_code_scanner: - :path: ".symlinks/plugins/qr_code_scanner/ios" - record_mp3_plus: - :path: ".symlinks/plugins/record_mp3_plus/ios" - rive_common: - :path: ".symlinks/plugins/rive_common/ios" - share: - :path: ".symlinks/plugins/share/ios" - shared_preferences_foundation: - :path: ".symlinks/plugins/shared_preferences_foundation/darwin" - speech_to_text: - :path: ".symlinks/plugins/speech_to_text/darwin" - sqflite: - :path: ".symlinks/plugins/sqflite/darwin" - url_launcher_ios: - :path: ".symlinks/plugins/url_launcher_ios/ios" - -SPEC CHECKSUMS: - audioplayers_darwin: 877d9a4d06331c5c374595e46e16453ac7eafa40 - device_calendar: 9cb33f88a02e19652ec7b8b122ca778f751b1f7b - DKImagePickerController: 946cec48c7873164274ecc4624d19e3da4c1ef3c - DKPhotoGallery: b3834fecb755ee09a593d7c9e389d8b5d6deed60 - file_picker: 09aa5ec1ab24135ccd7a1621c46c84134bfd6655 - Firebase: 98e6bf5278170668a7983e12971a66b2cd57fc8c - firebase_core: 2bedc3136ec7c7b8561c6123ed0239387b53f2af - firebase_messaging: 15d114e1a41fc31e4fbabcd48d765a19eec94a38 - FirebaseCore: a282032ae9295c795714ded2ec9c522fc237f8da - FirebaseCoreInternal: 35731192cab10797b88411be84940d2beb33a238 - FirebaseInstallations: 6ef4a1c7eb2a61ee1f74727d7f6ce2e72acf1414 - FirebaseMessaging: c9ec7b90c399c7a6100297e9d16f8a27fc7f7152 - Flutter: e0871f40cf51350855a761d2e70bf5af5b9b5de7 - flutter_keyboard_visibility: 0339d06371254c3eb25eeb90ba8d17dca8f9c069 - flutter_local_notifications: 4cde75091f6327eb8517fa068a0a5950212d2086 - flutter_sound: dde9a913063b65a27ba8fdc2039036b99b136c79 - flutter_sound_core: 0c6eb9d5268adc70ff159b3d65fd3d98a82d3a27 - flutter_timezone: ffb07bdad3c6276af8dada0f11978d8a1f8a20bb - fluttertoast: 723e187574b149e68e63ca4d39b837586b903cfa - FMDB: 728731dd336af3936ce00f91d9d8495f5718a0e6 - GoogleDataTransport: aae35b7ea0c09004c3797d53c8c41f66f219d6a7 - GoogleUtilities: 26a3abef001b6533cf678d3eb38fd3f614b7872d - image_cropper: 37d40f62177c101ff4c164906d259ea2c3aa70cf - image_picker_ios: c560581cceedb403a6ff17f2f816d7fea1421fc1 - local_auth_darwin: 66e40372f1c29f383a314c738c7446e2f7fdadc3 - MTBBarcodeScanner: f453b33c4b7dfe545d8c6484ed744d55671788cb - nanopb: fad817b59e0457d11a5dfbde799381cd727c1275 - open_file_ios: 461db5853723763573e140de3193656f91990d9e - package_info: 873975fc26034f0b863a300ad47e7f1ac6c7ec62 - path_provider_foundation: 2b6b4c569c0fb62ec74538f866245ac84301af46 - permission_handler_apple: 9878588469a2b0d0fc1e048d9f43605f92e6cec2 - pointer_interceptor_ios: 508241697ff0947f853c061945a8b822463947c1 - PromisesObjC: f5707f49cb48b9636751c5b2e7d227e43fba9f47 - qr_code_scanner: bb67d64904c3b9658ada8c402e8b4d406d5d796e - record_mp3_plus: be7806da5b5ff9694f8069f401120853c89f3398 - rive_common: cbbac3192af00d7341f19dae2f26298e9e37d99e - SDWebImage: 8a6b7b160b4d710e2a22b6900e25301075c34cb3 - share: 0b2c3e82132f5888bccca3351c504d0003b3b410 - shared_preferences_foundation: fcdcbc04712aee1108ac7fda236f363274528f78 - speech_to_text: 627d3fd2194770b51abb324ba45c2d39398f24a8 - sqflite: 673a0e54cc04b7d6dba8d24fb8095b31c3a99eec - SwiftyGif: 706c60cf65fa2bc5ee0313beece843c8eb8194d4 - Toast: 1f5ea13423a1e6674c4abdac5be53587ae481c4e - TOCropViewController: 80b8985ad794298fb69d3341de183f33d1853654 - Try: 5ef669ae832617b3cee58cb2c6f99fb767a4ff96 - url_launcher_ios: 5334b05cef931de560670eeae103fd3e431ac3fe - -PODFILE CHECKSUM: d8654c27146ad2b7c852fbdd93ef1a3785d9310b - -COCOAPODS: 1.12.0 diff --git a/ios/Runner.plist/GeneratedPluginRegistrant.m b/ios/Runner.plist/GeneratedPluginRegistrant.m index 153c6c06..2b9876b9 100644 --- a/ios/Runner.plist/GeneratedPluginRegistrant.m +++ b/ios/Runner.plist/GeneratedPluginRegistrant.m @@ -54,12 +54,6 @@ @import image_picker_ios; #endif -#if __has_include() -#import -#else -@import package_info; -#endif - #if __has_include() #import #else diff --git a/ios/Runner.xcodeproj/project.pbxproj b/ios/Runner.xcodeproj/project.pbxproj index 7bdb755d..6d04a2a4 100644 --- a/ios/Runner.xcodeproj/project.pbxproj +++ b/ios/Runner.xcodeproj/project.pbxproj @@ -11,8 +11,8 @@ 00C3AFCE29769C38002E7B47 /* GoogleService-Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = 00C3AFCD29769C37002E7B47 /* GoogleService-Info.plist */; }; 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; - 4141329F7EE1C2C4921406EF /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CCEA5D6B9129CB26397DBEBA /* Pods_Runner.framework */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; + 84713E5C1A48D35EB02DB255 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DC2334F09AFE7D4C8720A3D2 /* Pods_Runner.framework */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; @@ -37,11 +37,12 @@ 00C3AFCD29769C37002E7B47 /* GoogleService-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "GoogleService-Info.plist"; sourceTree = ""; }; 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; - 19F80F744566086934C1EFAB /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 2E3CB8321FC9463EA4F59770 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; + 834C7D121918F9FF211C5314 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -49,9 +50,8 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - B31016378DCE198B9537F302 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - B42BA5D3E47EC815EC803E18 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - CCEA5D6B9129CB26397DBEBA /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + B01BA1F7378A0B9F7249FF2A /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + DC2334F09AFE7D4C8720A3D2 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -59,7 +59,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 4141329F7EE1C2C4921406EF /* Pods_Runner.framework in Frameworks */, + 84713E5C1A48D35EB02DB255 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -69,21 +69,13 @@ 577ED37A491ADCF557B4F6D9 /* Pods */ = { isa = PBXGroup; children = ( - B42BA5D3E47EC815EC803E18 /* Pods-Runner.debug.xcconfig */, - B31016378DCE198B9537F302 /* Pods-Runner.release.xcconfig */, - 19F80F744566086934C1EFAB /* Pods-Runner.profile.xcconfig */, + 2E3CB8321FC9463EA4F59770 /* Pods-Runner.debug.xcconfig */, + B01BA1F7378A0B9F7249FF2A /* Pods-Runner.release.xcconfig */, + 834C7D121918F9FF211C5314 /* Pods-Runner.profile.xcconfig */, ); path = Pods; sourceTree = ""; }; - 87D8490E375D7CE60C246AAF /* Frameworks */ = { - isa = PBXGroup; - children = ( - CCEA5D6B9129CB26397DBEBA /* Pods_Runner.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; 9740EEB11CF90186004384FC /* Flutter */ = { isa = PBXGroup; children = ( @@ -103,7 +95,7 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 577ED37A491ADCF557B4F6D9 /* Pods */, - 87D8490E375D7CE60C246AAF /* Frameworks */, + ACFB4E3E17DB02D4A9B63D84 /* Frameworks */, ); sourceTree = ""; }; @@ -132,6 +124,14 @@ path = Runner; sourceTree = ""; }; + ACFB4E3E17DB02D4A9B63D84 /* Frameworks */ = { + isa = PBXGroup; + children = ( + DC2334F09AFE7D4C8720A3D2 /* Pods_Runner.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -139,15 +139,15 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 9F565295956C4424C1A65C21 /* [CP] Check Pods Manifest.lock */, + F8BE49D37BC14FBD6C4F3196 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - 55FB1946A3AB2CD5DD528CC0 /* [CP] Embed Pods Frameworks */, - 279DCC538D5C02B49D7A084C /* [CP] Copy Pods Resources */, + B921EEB42AD074FA76A076B1 /* [CP] Embed Pods Frameworks */, + A65B36E3496C62B7D376B428 /* [CP] Copy Pods Resources */, ); buildRules = ( ); @@ -209,72 +209,72 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 279DCC538D5C02B49D7A084C /* [CP] Copy Pods Resources */ = { + 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-input-files.xcfilelist", + inputPaths = ( + "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", ); - name = "[CP] Copy Pods Resources"; - outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-output-files.xcfilelist", + name = "Thin Binary"; + outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources.sh\"\n"; - showEnvVarsInLog = 0; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { + 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputPaths = ( - "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", ); - name = "Thin Binary"; + name = "Run Script"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - 55FB1946A3AB2CD5DD528CC0 /* [CP] Embed Pods Frameworks */ = { + A65B36E3496C62B7D376B428 /* [CP] Copy Pods Resources */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Embed Pods Frameworks"; + name = "[CP] Copy Pods Resources"; outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources.sh\"\n"; showEnvVarsInLog = 0; }; - 9740EEB61CF901F6004384FC /* Run Script */ = { + B921EEB42AD074FA76A076B1 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputPaths = ( + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "Run Script"; - outputPaths = ( + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; }; - 9F565295956C4424C1A65C21 /* [CP] Check Pods Manifest.lock */ = { + F8BE49D37BC14FBD6C4F3196 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -469,12 +469,8 @@ "-framework", "\"nanopb\"", "-framework", - "\"package_info\"", - "-framework", "\"qr_code_scanner\"", "-framework", - "\"share\"", - "-framework", "\"speech_to_text\"", "-framework", "\"sqflite\"", @@ -693,12 +689,8 @@ "-framework", "\"nanopb\"", "-framework", - "\"package_info\"", - "-framework", "\"qr_code_scanner\"", "-framework", - "\"share\"", - "-framework", "\"speech_to_text\"", "-framework", "\"sqflite\"", @@ -803,12 +795,8 @@ "-framework", "\"nanopb\"", "-framework", - "\"package_info\"", - "-framework", "\"qr_code_scanner\"", "-framework", - "\"share\"", - "-framework", "\"speech_to_text\"", "-framework", "\"sqflite\"", diff --git a/pubspec.lock b/pubspec.lock index 389acf4a..402dbb06 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -1065,18 +1065,18 @@ packages: dependency: "direct main" description: name: package_info_plus - sha256: b15fad91c4d3d1f2b48c053dd41cb82da007c27407dc9ab5f9aa59881d0e39d4 + sha256: "7976bfe4c583170d6cdc7077e3237560b364149fcd268b5f53d95a991963b191" url: "https://pub.dev" source: hosted - version: "8.1.4" + version: "8.3.0" package_info_plus_platform_interface: dependency: transitive description: name: package_info_plus_platform_interface - sha256: a5ef9986efc7bf772f2696183a3992615baa76c1ffb1189318dd8803778fb05b + sha256: "6c935fb612dff8e3cc9632c2b301720c77450a126114126ffaafe28d2e87956c" url: "https://pub.dev" source: hosted - version: "3.0.2" + version: "3.2.0" path: dependency: transitive description: diff --git a/pubspec.yaml b/pubspec.yaml index 0d605c47..8cc4034f 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -45,7 +45,7 @@ dependencies: image_picker: ^1.1.2 url_launcher: ^6.1.6 flutter_launcher_icons: ^0.13.1 - package_info_plus: ^8.1.4 + package_info_plus: ^8.3.0 share_plus: ^10.1.4 flutter_local_notifications: ^17.2.2 cached_network_image: ^3.2.2 From 4a7f1eb0372c443d39d481427e428a4c8dab9669 Mon Sep 17 00:00:00 2001 From: Sikander Saleem Date: Mon, 3 Mar 2025 12:27:44 +0300 Subject: [PATCH 3/3] ppm improvement, recurrent task improvement --- .../firebase_notification_manger.dart | 21 ++----- .../providers/api/parts_provider.dart | 52 ++++++++--------- .../widgets/request_category_list.dart | 9 ++- .../new_models/work_order_detail_model.dart | 2 +- .../land_page/requests/ppm_item_view.dart | 4 +- .../requests/recurrent_wo_item_view.dart | 58 +++++++++++++++++-- .../requests/request_paginated_listview.dart | 18 ++++-- .../requests/service_request_item_view.dart | 2 + .../pages/land_page/requests_list_page.dart | 1 + .../widgets/request_item_view_list.dart | 2 +- .../components/internal_request.dart | 6 +- .../forms/spare_part/spare_part_request.dart | 1 + .../pages/user/ppm/ppm_details_page.dart | 27 ++++----- .../pages/user/ppm/update_ppm/update_ppm.dart | 3 +- lib/views/widgets/ppm/ppm_item.dart | 2 +- 15 files changed, 134 insertions(+), 74 deletions(-) diff --git a/lib/controllers/notification/firebase_notification_manger.dart b/lib/controllers/notification/firebase_notification_manger.dart index 3c78fad6..850a2851 100644 --- a/lib/controllers/notification/firebase_notification_manger.dart +++ b/lib/controllers/notification/firebase_notification_manger.dart @@ -4,17 +4,14 @@ import 'dart:io'; import 'package:firebase_messaging/firebase_messaging.dart'; import 'package:flutter/material.dart'; import 'package:google_api_availability/google_api_availability.dart'; +import 'package:huawei_push/huawei_push.dart' as h_push; import 'package:test_sa/controllers/notification/notification_manger.dart'; -import 'package:test_sa/models/all_requests_and_count_model.dart'; import 'package:test_sa/models/device/asset_transfer.dart'; import 'package:test_sa/models/new_models/gas_refill_model.dart'; -import 'package:huawei_push/huawei_push.dart' as h_push; -import 'package:test_sa/models/service_request/service_request.dart'; import 'package:test_sa/service_request_latest/views/service_request_detail_main_view.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/ppm/ppm_details_page.dart'; -import 'package:test_sa/views/pages/user/requests/service_request_details.dart'; @pragma('vm:entry-point') Future firebaseMessagingBackgroundHandler(RemoteMessage message) async {} @@ -38,7 +35,7 @@ class FirebaseNotificationManger { // print("Huawei Token: ${hToken}"); token = hToken; }, onError: (e) { - print( "Huawei TokenError"+e.toString()); + print("Huawei TokenError" + e.toString()); }); h_push.Push.getToken(''); } else { @@ -83,7 +80,7 @@ class FirebaseNotificationManger { Widget? serviceClass; if (messageData["requestType"] == "Service request to engineer") { - serviceClass = ServiceRequestDetailMain(requestId: messageData["requestNumber"]??''); + serviceClass = ServiceRequestDetailMain(requestId: messageData["requestNumber"] ?? ''); } else if (messageData["requestType"] == "Gas Refill") { serviceClass = GasRefillDetailsPage( priority: messageData["priority"], @@ -93,11 +90,7 @@ class FirebaseNotificationManger { } else if (messageData["requestType"] == "Asset Transfer") { serviceClass = DeviceTransferDetails(model: AssetTransfer(id: int.parse(messageData["requestNumber"].toString()))); } else if (messageData["requestType"] == "PPM") { - serviceClass = PpmDetailsPage( - request: RequestsDetails( - id: int.parse(messageData["requestNumber"].toString()), - priority: messageData["priority"], - )); + serviceClass = PpmDetailsPage(requestId: int.parse(messageData["requestNumber"].toString())); } // else if (data["requestType"] == "WorkOrder") { // @@ -110,8 +103,7 @@ class FirebaseNotificationManger { } static initialized(BuildContext context) async { - -//TOD0 add platform check here also +//TOD0 add platform check here also if (!(await isGoogleServicesAvailable())) { var initialNotification = await h_push.Push.getInitialNotification(); if (initialNotification != null) { @@ -165,8 +157,7 @@ class FirebaseNotificationManger { FirebaseMessaging.onMessage.listen((RemoteMessage message) { print('notification i got is ${message.toMap()}'); if (Platform.isAndroid) { - - if(message.data["notificationType"]!='NurseConfirmArrive'){ + if (message.data["notificationType"] != 'NurseConfirmArrive') { NotificationManger.showNotification( title: message.notification?.title ?? "", subtext: message.notification?.body ?? "", hashcode: int.tryParse("1234" ?? "") ?? 1, payload: json.encode(message.data), context: context); } diff --git a/lib/controllers/providers/api/parts_provider.dart b/lib/controllers/providers/api/parts_provider.dart index 4163e06c..7ec4d8fc 100644 --- a/lib/controllers/providers/api/parts_provider.dart +++ b/lib/controllers/providers/api/parts_provider.dart @@ -52,32 +52,32 @@ class PartsProvider extends ChangeNotifier { /// return state code if request complete may be 200, 404 or 403 /// for more details check http state manager /// lib\controllers\http_status_manger\http_status_manger.dart - Future getParts({String? title}) async { - if (_loading == true) return -2; - _loading = true; - notifyListeners(); - late Response response; - try { - response = await ApiManager.instance.post(URLs.getPartNumber, body: {if (title != null && title.isNotEmpty) "partName": title}); - _stateCode = response.statusCode; - if (response.statusCode >= 200 && response.statusCode < 300) { - // client's request was successfully received - List categoriesListJson = json.decode(utf8.decode(response.bodyBytes)); - List page = categoriesListJson.map((part) => SparePart.fromJson(part)).toList(); - _parts ??= []; - _parts!.addAll(page.map((e) => SparePartsWorkOrders(sparePart: e)).toList()); - _nextPage = page.length >= pageItemNumber; - } - _loading = false; - notifyListeners(); - return response.statusCode; - } catch (error) { - _loading = false; - _stateCode = -1; - notifyListeners(); - return -1; - } - } + // Future getParts({String? title}) async { + // if (_loading == true) return -2; + // _loading = true; + // notifyListeners(); + // late Response response; + // try { + // response = await ApiManager.instance.post(URLs.getPartNumber, body: {if (title != null && title.isNotEmpty) "partName": title}); + // _stateCode = response.statusCode; + // if (response.statusCode >= 200 && response.statusCode < 300) { + // // client's request was successfully received + // List categoriesListJson = json.decode(utf8.decode(response.bodyBytes)); + // List page = categoriesListJson.map((part) => SparePart.fromJson(part)).toList(); + // _parts ??= []; + // _parts!.addAll(page.map((e) => SparePartsWorkOrders(sparePart: e)).toList()); + // _nextPage = page.length >= pageItemNumber; + // } + // _loading = false; + // notifyListeners(); + // return response.statusCode; + // } catch (error) { + // _loading = false; + // _stateCode = -1; + // notifyListeners(); + // return -1; + // } + // } /// return -2 if request in progress /// return -1 if error happen when sending request diff --git a/lib/dashboard_latest/widgets/request_category_list.dart b/lib/dashboard_latest/widgets/request_category_list.dart index c70903e9..7c651dd3 100644 --- a/lib/dashboard_latest/widgets/request_category_list.dart +++ b/lib/dashboard_latest/widgets/request_category_list.dart @@ -6,6 +6,7 @@ import 'package:test_sa/new_views/app_style/app_color.dart'; import 'package:test_sa/new_views/pages/land_page/requests/asset_item_view.dart'; import 'package:test_sa/new_views/pages/land_page/requests/gas_refill_item_view.dart'; import 'package:test_sa/new_views/pages/land_page/requests/ppm_item_view.dart'; +import 'package:test_sa/new_views/pages/land_page/requests/recurrent_wo_item_view.dart'; import 'package:test_sa/new_views/pages/land_page/requests/service_request_item_view.dart'; class RequestCategoryList extends StatelessWidget { @@ -17,16 +18,17 @@ class RequestCategoryList extends StatelessWidget { @override Widget build(BuildContext context) { - return ListView.builder( + return ListView.separated( itemCount: list.length < totalCount ? list.length + 1 : list.length, shrinkWrap: true, padding: const EdgeInsets.all(16), physics: const NeverScrollableScrollPhysics(), + separatorBuilder: (cxt, index) => 16.height, itemBuilder: (context, index) { if (index == list.length) { return const CircularProgressIndicator(color: AppColor.primary10, strokeWidth: 1).center; } - return Padding(padding: EdgeInsets.symmetric(vertical: 10.toScreenHeight), child: _buildRequestItem(list[index])); + return _buildRequestItem(list[index]); }, ); } @@ -36,6 +38,7 @@ class RequestCategoryList extends StatelessWidget { bool isGasRefill = request.transactionNo == 2; bool isAssetTransfer = request.transactionNo == 3; bool isPPMs = request.transactionNo == 4; + bool isRecurrentTask = request.transactionNo == 5; if (isServiceRequest) { return ServiceRequestItemView(requestData: request); @@ -45,6 +48,8 @@ class RequestCategoryList extends StatelessWidget { return PpmItemView(requestData: request); } else if (isAssetTransfer) { return AssetItemView(requestData: request); + } else if (isRecurrentTask) { + return RecurrentWoItemView(requestData: request); } else { return Container( height: 100, diff --git a/lib/models/new_models/work_order_detail_model.dart b/lib/models/new_models/work_order_detail_model.dart index 6b37987b..8117d902 100644 --- a/lib/models/new_models/work_order_detail_model.dart +++ b/lib/models/new_models/work_order_detail_model.dart @@ -174,7 +174,7 @@ class WorkOrderData { failureReasone: json["failureReasone"] == null ? null : Lookup.fromJson(json["failureReasone"]), faultDescription: json["faultDescription"] == null ? null : FaultDescription.fromJson(json["faultDescription"]), solution: json["solution"] == null ? null : Lookup.fromJson(json["solution"]), - totalWorkingHours: json["totalWorkingHours"], + totalWorkingHours: (json["totalWorkingHours"] ??"").toString(), workOrderHistory: json["workOrderHistory"] == null ? [] : List.from(json["workOrderHistory"]!.map((x) => WorkOrderHistory.fromJson(x))), activities: json["activities"] == null ? [] : List.from(json["activities"]!.map((x) => Activities.fromJson(x))), needAVisitDateTime: DateTime.tryParse(json["needAVisitDateTime"] ?? ""), diff --git a/lib/new_views/pages/land_page/requests/ppm_item_view.dart b/lib/new_views/pages/land_page/requests/ppm_item_view.dart index 9875c564..a4569881 100644 --- a/lib/new_views/pages/land_page/requests/ppm_item_view.dart +++ b/lib/new_views/pages/land_page/requests/ppm_item_view.dart @@ -67,7 +67,7 @@ class PpmItemView extends StatelessWidget { ), ], ).toShadowContainer(context, withShadow: showShadow).onPress(() { - // Navigator.of(context).push(MaterialPageRoute(builder: (_) => PpmDetailsPage(request: request))); + Navigator.of(context).push(MaterialPageRoute(builder: (_) => PpmDetailsPage(requestId: requestData!.id!))); }); } if (requestDetails != null) { @@ -117,7 +117,7 @@ class PpmItemView extends StatelessWidget { ), ], ).toShadowContainer(context, withShadow: showShadow).onPress(() { - Navigator.of(context).push(MaterialPageRoute(builder: (_) => PpmDetailsPage(request: requestDetails!))); + Navigator.of(context).push(MaterialPageRoute(builder: (_) => PpmDetailsPage(requestId: requestDetails!.id!))); }); } return SizedBox(); diff --git a/lib/new_views/pages/land_page/requests/recurrent_wo_item_view.dart b/lib/new_views/pages/land_page/requests/recurrent_wo_item_view.dart index 60ead276..ec9223f3 100644 --- a/lib/new_views/pages/land_page/requests/recurrent_wo_item_view.dart +++ b/lib/new_views/pages/land_page/requests/recurrent_wo_item_view.dart @@ -1,25 +1,75 @@ import 'package:flutter/material.dart'; -import 'package:provider/provider.dart'; -import 'package:test_sa/controllers/providers/api/all_requests_provider.dart'; import 'package:test_sa/extensions/context_extension.dart'; import 'package:test_sa/extensions/int_extensions.dart'; import 'package:test_sa/extensions/string_extensions.dart'; import 'package:test_sa/extensions/text_extensions.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/ppm/recurrent_wo.dart'; +import 'package:test_sa/models/new_models/dashboard_detail.dart'; import 'package:test_sa/new_views/app_style/app_color.dart'; import 'package:test_sa/views/pages/user/ppm/ppm_work_order/recurrent_wo/recurrent_work_order_view.dart'; + import '../../../../views/widgets/requests/request_status.dart'; class RecurrentWoItemView extends StatelessWidget { + final Data? requestData; final RequestsDetails? requestDetails; final bool showShadow; - const RecurrentWoItemView({Key? key, this.requestDetails, this.showShadow = true}) : super(key: key); + const RecurrentWoItemView({Key? key, this.requestData, this.requestDetails, this.showShadow = true}) : super(key: key); @override Widget build(BuildContext context) { + if (requestData != null) { + return Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Row( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + StatusLabel( + label: requestData!.priorityName!, + textColor: AppColor.getRequestStatusTextColorByName(context, requestData!.priorityName!), + backgroundColor: AppColor.getRequestStatusColorByName(context, requestData!.priorityName!), + ), + 8.width, + StatusLabel( + label: requestData!.statusName!, + textColor: AppColor.getRequestStatusTextColorByName(context, requestData!.statusName!), + backgroundColor: AppColor.getRequestStatusColorByName(context, requestData!.statusName!), + ), + 1.width.expanded, + Text( + requestData!.transactionDate?.toServiceRequestCardFormat ?? "", + textAlign: TextAlign.end, + style: AppTextStyles.tinyFont.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral50), + ), + ], + ), + 8.height, + (requestData?.typeTransaction ?? context.translation.ppmRequest).heading5(context), + 8.height, + // '${context.translation.assetNumber}: ${requestData!.assetNumber}'.bodyText(context), + // '${context.translation.assetSN}: ${request.assetSN}'.bodyText(context),//todo ask ahmed + // '${context.translation.code}: ${request.code}'.bodyText(context), + '${context.translation.requestNo}: ${requestData!.requestNo}'.bodyText(context), + 16.height, + Row( + mainAxisSize: MainAxisSize.min, + children: [ + Text( + context.translation.viewDetails, + style: AppTextStyles.bodyText.copyWith(color: AppColor.blueStatus(context)), + ), + 4.width, + Icon(Icons.arrow_forward, color: AppColor.blueStatus(context), size: 14) + ], + ), + ], + ).toShadowContainer(context, withShadow: showShadow).onPress(() { + Navigator.of(context).push(MaterialPageRoute(builder: (_) => RecurrentWorkOrderView(taskId: requestData!.id))); + }); + } if (requestDetails != null) { return Column( crossAxisAlignment: CrossAxisAlignment.start, diff --git a/lib/new_views/pages/land_page/requests/request_paginated_listview.dart b/lib/new_views/pages/land_page/requests/request_paginated_listview.dart index 5faf580f..2a61d46a 100644 --- a/lib/new_views/pages/land_page/requests/request_paginated_listview.dart +++ b/lib/new_views/pages/land_page/requests/request_paginated_listview.dart @@ -5,6 +5,7 @@ import 'package:test_sa/new_views/app_style/app_color.dart'; import 'package:test_sa/new_views/pages/land_page/requests/asset_item_view.dart'; import 'package:test_sa/new_views/pages/land_page/requests/gas_refill_item_view.dart'; import 'package:test_sa/new_views/pages/land_page/requests/ppm_item_view.dart'; +import 'package:test_sa/new_views/pages/land_page/requests/recurrent_wo_item_view.dart'; import 'package:test_sa/new_views/pages/land_page/requests/service_request_item_view.dart'; class RequestPaginatedListview extends StatelessWidget { @@ -17,12 +18,13 @@ class RequestPaginatedListview extends StatelessWidget { @override Widget build(BuildContext context) { - print('count i got is ${totalCount}'); - return ListView.builder( + + return ListView.separated( itemCount: list.length < totalCount ? list.length + 1 : list.length, controller: scrollController, shrinkWrap: true, - padding: EdgeInsets.symmetric(horizontal: 16.toScreenWidth), + padding: const EdgeInsets.all(16), + separatorBuilder: (cxt, index) => 16.height, itemBuilder: (context, index) { if (index == list.length) { return const ListTile( @@ -37,7 +39,7 @@ class RequestPaginatedListview extends StatelessWidget { ), ); } - return Padding(padding: EdgeInsets.symmetric(vertical: 10.toScreenHeight), child: _buildRequestItem(list[index])); + return _buildRequestItem(list[index]); }, ); } @@ -47,15 +49,21 @@ class RequestPaginatedListview extends StatelessWidget { bool isGasRefill = request.transactionNo == 2; bool isAssetTransfer = request.transactionNo == 3; bool isPPMs = request.transactionNo == 4; + bool isRecurrentTask = request.transactionNo == 5; if (isServiceRequest) { - return ServiceRequestItemView(requestData: request,refreshData: false,); + return ServiceRequestItemView( + requestData: request, + refreshData: false, + ); } else if (isGasRefill) { return GasRefillItemView(requestData: request); } else if (isPPMs) { return PpmItemView(requestData: request); } else if (isAssetTransfer) { return AssetItemView(requestData: request); + } else if (isRecurrentTask) { + return RecurrentWoItemView(requestData: request); } else { return Container( height: 100, diff --git a/lib/new_views/pages/land_page/requests/service_request_item_view.dart b/lib/new_views/pages/land_page/requests/service_request_item_view.dart index 6b936f2e..e9b09bbc 100644 --- a/lib/new_views/pages/land_page/requests/service_request_item_view.dart +++ b/lib/new_views/pages/land_page/requests/service_request_item_view.dart @@ -51,6 +51,7 @@ class ServiceRequestItemView extends StatelessWidget { ), 8.height, (requestData?.typeTransaction ?? context.translation.correctiveMaintenance).heading5(context), + 8.height, '${context.translation.assetName}: ${requestData!.assetName?.cleanupWhitespace.capitalizeFirstOfEach}'.bodyText(context), // '${context.translation.assetNumber}: ${request.assetNo}'.bodyText(context), // '${context.translation.requestType}: ${requestData!.requestTypeName}'.bodyText(context), @@ -108,6 +109,7 @@ class ServiceRequestItemView extends StatelessWidget { ), 8.height, (requestDetails!.nameOfType ?? context.translation.correctiveMaintenance).heading5(context), + 8.height, '${context.translation.assetName}: ${requestDetails!.assetName?.cleanupWhitespace.capitalizeFirstOfEach}'.bodyText(context), '${context.translation.assetNumber}: ${requestDetails!.assetNo}'.bodyText(context), '${context.translation.requestType}: ${requestDetails!.requestType}'.bodyText(context), diff --git a/lib/new_views/pages/land_page/requests_list_page.dart b/lib/new_views/pages/land_page/requests_list_page.dart index 45aa9994..3568505d 100644 --- a/lib/new_views/pages/land_page/requests_list_page.dart +++ b/lib/new_views/pages/land_page/requests_list_page.dart @@ -70,6 +70,7 @@ class _RequestsListPageState extends State { if (snapshot.isDetailLoading || snapshot.requestDetailList == null) { return ListView.builder( itemCount: 6, + padding: const EdgeInsets.all(16), itemBuilder: (context, index) { return Padding( padding: EdgeInsets.symmetric(vertical: 10.toScreenHeight, horizontal: 0), diff --git a/lib/new_views/pages/land_page/widgets/request_item_view_list.dart b/lib/new_views/pages/land_page/widgets/request_item_view_list.dart index 0a06c6d6..67eafa6c 100644 --- a/lib/new_views/pages/land_page/widgets/request_item_view_list.dart +++ b/lib/new_views/pages/land_page/widgets/request_item_view_list.dart @@ -64,7 +64,7 @@ class RequestItemViewList extends StatelessWidget { // color: Colors.grey, // ); }, - separatorBuilder: (cxt, index) => 8.height, + separatorBuilder: (cxt, index) => 16.height, itemCount: isLoading ? 6 : list.length); } } diff --git a/lib/service_request_latest/views/forms/maintenance_request/components/internal_request.dart b/lib/service_request_latest/views/forms/maintenance_request/components/internal_request.dart index 189d303e..c611ec97 100644 --- a/lib/service_request_latest/views/forms/maintenance_request/components/internal_request.dart +++ b/lib/service_request_latest/views/forms/maintenance_request/components/internal_request.dart @@ -53,6 +53,8 @@ class _InternalMaintenanceRequestState extends State @override Widget build(BuildContext context) { return Consumer(builder: (context, requestDetailProvider, child) { + + double totalWorkingHours = _requestDetailProvider?.activityMaintenanceHelperModel?.activityMaintenanceTimers ?.fold(0.0, (sum, item) => (sum ?? 0) + DateTime.parse(item.endTime!).difference(DateTime.parse(item.startTime!)).inSeconds) ?? 0; @@ -242,11 +244,11 @@ class _InternalMaintenanceRequestState extends State initialValue: requestDetailProvider.activityMaintenanceHelperModel?.travelHours?.toString(), textInputType: TextInputType.number, onChange: (value) { - requestDetailProvider.activityMaintenanceHelperModel?.travelHours = int.tryParse(value); + requestDetailProvider.activityMaintenanceHelperModel?.travelHours = num.parse(value) ;// int.tryParse(value); }, // contentPadding: EdgeInsets.symmetric(vertical: 18.toScreenHeight, horizontal: 16.toScreenWidth), onSaved: (value) { - requestDetailProvider.activityMaintenanceHelperModel?.travelHours = value as int?; + requestDetailProvider.activityMaintenanceHelperModel?.travelHours = value as num?; }, ), 16.height, diff --git a/lib/service_request_latest/views/forms/spare_part/spare_part_request.dart b/lib/service_request_latest/views/forms/spare_part/spare_part_request.dart index 2b4ff463..3df20c4c 100644 --- a/lib/service_request_latest/views/forms/spare_part/spare_part_request.dart +++ b/lib/service_request_latest/views/forms/spare_part/spare_part_request.dart @@ -151,6 +151,7 @@ class _SparePartRequestState extends State with TickerProvider title: context.translation.partNo, staticData: _spareParts, showShadow: false, + showAsBottomSheet: true, loading: _isLoading, initialValue: requestDetailProvider.sparePartHelperModel?.sparePart, backgroundColor: context.isDark ? AppColor.neutral20 : AppColor.neutral90, diff --git a/lib/views/pages/user/ppm/ppm_details_page.dart b/lib/views/pages/user/ppm/ppm_details_page.dart index 6785e134..107cc4d7 100644 --- a/lib/views/pages/user/ppm/ppm_details_page.dart +++ b/lib/views/pages/user/ppm/ppm_details_page.dart @@ -6,7 +6,6 @@ import 'package:test_sa/extensions/int_extensions.dart'; import 'package:test_sa/extensions/string_extensions.dart'; import 'package:test_sa/extensions/text_extensions.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/plan_preventive_visit/plan_preventive_visit_model.dart'; import 'package:test_sa/new_views/common_widgets/default_app_bar.dart'; import 'package:test_sa/views/pages/user/ppm/update_ppm/update_ppm.dart'; @@ -20,9 +19,11 @@ import '../../../widgets/requests/request_status.dart'; class PpmDetailsPage extends StatefulWidget { static const String id = "/visit-details"; - final RequestsDetails request; - const PpmDetailsPage({Key? key, required this.request}) : super(key: key); + // final RequestsDetails request; + final int requestId; + + const PpmDetailsPage({Key? key, required this.requestId}) : super(key: key); @override _PpmDetailsPageState createState() { @@ -48,7 +49,7 @@ class _PpmDetailsPageState extends State { Future getVisitData() async { ppmProvider = Provider.of(context, listen: false); - await ppmProvider?.getPlanPreventiveVisitById(widget.request.id!); + await ppmProvider?.getPlanPreventiveVisitById(widget.requestId); } @override @@ -70,20 +71,20 @@ class _PpmDetailsPageState extends State { children: [ Row( children: [ - if (widget.request.priority != null) - StatusLabel( - label: widget.request.priority, - textColor: AppColor.getRequestStatusTextColorByName(context, widget.request.priority!), - backgroundColor: AppColor.getRequestStatusColorByName(context, widget.request.priority!), - ), - if (widget.request.priority != null) 8.width, + // if (widget.request.priority != null) + // StatusLabel( + // label: widget.request.priority, + // textColor: AppColor.getRequestStatusTextColorByName(context, widget.request.priority!), + // backgroundColor: AppColor.getRequestStatusColorByName(context, widget.request.priority!), + // ), + // if (planPreventiveVisit?.visitStatus != null) 8.width, StatusLabel( label: planPreventiveVisit?.visitStatus!.name!, id: planPreventiveVisit!.visitStatus!.id!, textColor: AppColor.getRequestStatusTextColorByName(context, planPreventiveVisit.visitStatus!.name!), backgroundColor: AppColor.getRequestStatusColorByName(context, planPreventiveVisit.visitStatus!.name!), ), - 1.width.expanded, + // 1.width.expanded, ], ), 8.height, @@ -108,7 +109,7 @@ class _PpmDetailsPageState extends State { if (userProvider!.user!.type == UsersTypes.engineer && (planPreventiveVisit.visitStatus!.id! != 270 && planPreventiveVisit.visitStatus!.id! != 269)) AppFilledButton( onPressed: () async { - await Navigator.of(context).push(MaterialPageRoute(builder: (_) => UpdatePpm(ppm: null, planPreventiveVisit: planPreventiveVisit, details: widget.request))); + await Navigator.of(context).push(MaterialPageRoute(builder: (_) => UpdatePpm(ppm: null, planPreventiveVisit: planPreventiveVisit))); getVisitData(); }, label: context.translation.updateRequest, diff --git a/lib/views/pages/user/ppm/update_ppm/update_ppm.dart b/lib/views/pages/user/ppm/update_ppm/update_ppm.dart index 1b98f25a..3f4e54d7 100644 --- a/lib/views/pages/user/ppm/update_ppm/update_ppm.dart +++ b/lib/views/pages/user/ppm/update_ppm/update_ppm.dart @@ -28,9 +28,8 @@ import 'wo_info_form.dart'; class UpdatePpm extends StatefulWidget { final Ppm? ppm; final PlanPreventiveVisit planPreventiveVisit; - final RequestsDetails? details; - const UpdatePpm({Key? key, this.ppm, required this.planPreventiveVisit, this.details}) : super(key: key); + const UpdatePpm({Key? key, this.ppm, required this.planPreventiveVisit}) : super(key: key); @override State createState() => _UpdatePpmState(); diff --git a/lib/views/widgets/ppm/ppm_item.dart b/lib/views/widgets/ppm/ppm_item.dart index 43146a63..ad8361ca 100644 --- a/lib/views/widgets/ppm/ppm_item.dart +++ b/lib/views/widgets/ppm/ppm_item.dart @@ -66,7 +66,7 @@ class PpmItem extends StatelessWidget { Icon(Icons.arrow_forward, color: AppColor.blueStatus(context), size: 14) ], ).onPress(() { - Navigator.of(context).push(MaterialPageRoute(builder: (_) => PpmDetailsPage(request: RequestsDetails(id: ppm.id!.toInt())))); + Navigator.of(context).push(MaterialPageRoute(builder: (_) => PpmDetailsPage(requestId: ppm.id!.toInt()))); }), ], ).expanded,