diff --git a/ios/Podfile.lock b/ios/Podfile.lock new file mode 100644 index 00000000..ffbf5eb6 --- /dev/null +++ b/ios/Podfile.lock @@ -0,0 +1,371 @@ +PODS: + - audio_session (0.0.1): + - Flutter + - 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 + - DTTJailbreakDetection (0.4.0) + - 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.9.0): + - "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 + - geolocator_apple (1.2.0): + - Flutter + - 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 + - just_audio (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) + - nfc_manager (0.0.1): + - Flutter + - open_file_ios (0.0.1): + - Flutter + - package_info_plus (0.4.5): + - 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 + - safe_device (1.0.0): + - DTTJailbreakDetection + - Flutter + - SDWebImage (5.21.0): + - SDWebImage/Core (= 5.21.0) + - SDWebImage/Core (5.21.0) + - share_plus (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 + - wifi_iot (0.0.1): + - Flutter + +DEPENDENCIES: + - audio_session (from `.symlinks/plugins/audio_session/ios`) + - 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 + - geolocator_apple (from `.symlinks/plugins/geolocator_apple/ios`) + - image_cropper (from `.symlinks/plugins/image_cropper/ios`) + - image_picker_ios (from `.symlinks/plugins/image_picker_ios/ios`) + - just_audio (from `.symlinks/plugins/just_audio/ios`) + - local_auth_darwin (from `.symlinks/plugins/local_auth_darwin/darwin`) + - nfc_manager (from `.symlinks/plugins/nfc_manager/ios`) + - open_file_ios (from `.symlinks/plugins/open_file_ios/ios`) + - package_info_plus (from `.symlinks/plugins/package_info_plus/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`) + - safe_device (from `.symlinks/plugins/safe_device/ios`) + - share_plus (from `.symlinks/plugins/share_plus/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`) + - wifi_iot (from `.symlinks/plugins/wifi_iot/ios`) + +SPEC REPOS: + trunk: + - DKImagePickerController + - DKPhotoGallery + - DTTJailbreakDetection + - Firebase + - FirebaseCore + - FirebaseCoreInternal + - FirebaseInstallations + - FirebaseMessaging + - flutter_sound_core + - FMDB + - GoogleDataTransport + - GoogleUtilities + - MTBBarcodeScanner + - nanopb + - PromisesObjC + - SDWebImage + - SwiftyGif + - Toast + - TOCropViewController + - Try + +EXTERNAL SOURCES: + audio_session: + :path: ".symlinks/plugins/audio_session/ios" + 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" + geolocator_apple: + :path: ".symlinks/plugins/geolocator_apple/ios" + image_cropper: + :path: ".symlinks/plugins/image_cropper/ios" + image_picker_ios: + :path: ".symlinks/plugins/image_picker_ios/ios" + just_audio: + :path: ".symlinks/plugins/just_audio/ios" + local_auth_darwin: + :path: ".symlinks/plugins/local_auth_darwin/darwin" + nfc_manager: + :path: ".symlinks/plugins/nfc_manager/ios" + open_file_ios: + :path: ".symlinks/plugins/open_file_ios/ios" + package_info_plus: + :path: ".symlinks/plugins/package_info_plus/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" + safe_device: + :path: ".symlinks/plugins/safe_device/ios" + share_plus: + :path: ".symlinks/plugins/share_plus/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" + wifi_iot: + :path: ".symlinks/plugins/wifi_iot/ios" + +SPEC CHECKSUMS: + audio_session: 088d2483ebd1dc43f51d253d4a1c517d9a2e7207 + audioplayers_darwin: 877d9a4d06331c5c374595e46e16453ac7eafa40 + device_calendar: 9cb33f88a02e19652ec7b8b122ca778f751b1f7b + DKImagePickerController: 946cec48c7873164274ecc4624d19e3da4c1ef3c + DKPhotoGallery: b3834fecb755ee09a593d7c9e389d8b5d6deed60 + DTTJailbreakDetection: 5e356c5badc17995f65a83ed9483f787a0057b71 + file_picker: 09aa5ec1ab24135ccd7a1621c46c84134bfd6655 + Firebase: 98e6bf5278170668a7983e12971a66b2cd57fc8c + firebase_core: 2bedc3136ec7c7b8561c6123ed0239387b53f2af + firebase_messaging: 15d114e1a41fc31e4fbabcd48d765a19eec94a38 + FirebaseCore: a282032ae9295c795714ded2ec9c522fc237f8da + FirebaseCoreInternal: 154779013b85b4b290fdba38414df475f42e3096 + 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 + geolocator_apple: 9bcea1918ff7f0062d98345d238ae12718acfbc1 + GoogleDataTransport: aae35b7ea0c09004c3797d53c8c41f66f219d6a7 + GoogleUtilities: 26a3abef001b6533cf678d3eb38fd3f614b7872d + image_cropper: 37d40f62177c101ff4c164906d259ea2c3aa70cf + image_picker_ios: c560581cceedb403a6ff17f2f816d7fea1421fc1 + just_audio: baa7252489dbcf47a4c7cc9ca663e9661c99aafa + local_auth_darwin: 66e40372f1c29f383a314c738c7446e2f7fdadc3 + MTBBarcodeScanner: f453b33c4b7dfe545d8c6484ed744d55671788cb + nanopb: fad817b59e0457d11a5dfbde799381cd727c1275 + nfc_manager: d7da7cb781f7744b94df5fe9dbca904ac4a0939e + open_file_ios: 461db5853723763573e140de3193656f91990d9e + package_info_plus: c0502532a26c7662a62a356cebe2692ec5fe4ec4 + 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 + safe_device: 4539eb6bdbeb4b61a763a51c4e73e6b37dea4e3d + SDWebImage: f84b0feeb08d2d11e6a9b843cb06d75ebf5b8868 + share_plus: 8b6f8b3447e494cca5317c8c3073de39b3600d1f + shared_preferences_foundation: fcdcbc04712aee1108ac7fda236f363274528f78 + speech_to_text: 627d3fd2194770b51abb324ba45c2d39398f24a8 + sqflite: 673a0e54cc04b7d6dba8d24fb8095b31c3a99eec + SwiftyGif: 706c60cf65fa2bc5ee0313beece843c8eb8194d4 + Toast: 1f5ea13423a1e6674c4abdac5be53587ae481c4e + TOCropViewController: 80b8985ad794298fb69d3341de183f33d1853654 + Try: 5ef669ae832617b3cee58cb2c6f99fb767a4ff96 + url_launcher_ios: 5334b05cef931de560670eeae103fd3e431ac3fe + wifi_iot: b5aafd6f9b52f8a357383a1deabab45f31cd602d + +PODFILE CHECKSUM: d8654c27146ad2b7c852fbdd93ef1a3785d9310b + +COCOAPODS: 1.12.0 diff --git a/lib/controllers/providers/api/ppm_provider.dart b/lib/controllers/providers/api/ppm_provider.dart index 8e4696df..0af12483 100644 --- a/lib/controllers/providers/api/ppm_provider.dart +++ b/lib/controllers/providers/api/ppm_provider.dart @@ -149,10 +149,11 @@ class PpmProvider extends ChangeNotifier { // } Future getPlanPreventiveVisitById(int id) async { - // try { + try { isLoading = true; Response response = await ApiManager.instance.get(URLs.getPlanPreventiveVisitById + "?planPreventiveVisitId=$id"); if (response.statusCode >= 200 && response.statusCode < 300) { + ppmPlanAttachments = []; planPreventiveVisit = PlanPreventiveVisit.fromJson(json.decode(response.body)["data"]); isLoading = false; notifyListeners(); @@ -161,11 +162,11 @@ class PpmProvider extends ChangeNotifier { isLoading = false; notifyListeners(); return null; - // } catch (error) { - // isLoading= false; - // notifyListeners(); - // return null; - // } + } catch (error) { + isLoading= false; + notifyListeners(); + return null; + } } Future updateVisitByEngineer({required int status}) async { diff --git a/lib/new_views/common_widgets/app_drawer.dart b/lib/new_views/common_widgets/app_drawer.dart index 0558822d..3426a056 100644 --- a/lib/new_views/common_widgets/app_drawer.dart +++ b/lib/new_views/common_widgets/app_drawer.dart @@ -86,7 +86,7 @@ class AppDrawer extends StatelessWidget { context: context, builder: (_) => AAlertDialog(title: context.translation.signOut, content: context.translation.logoutAlert), ); - if (result ?? false) { + if (result) { settingProvider.resetSettings(); userProvider.reset(); Navigator.of(context).pop(); diff --git a/lib/new_views/common_widgets/app_text_form_field.dart b/lib/new_views/common_widgets/app_text_form_field.dart index d9570aba..227319f5 100644 --- a/lib/new_views/common_widgets/app_text_form_field.dart +++ b/lib/new_views/common_widgets/app_text_form_field.dart @@ -43,6 +43,7 @@ class AppTextFormField extends StatefulWidget { final VoidCallback? onTap; final bool showSpeechToText; final Color? enableColor; + final bool makeMultiLinesNull; const AppTextFormField({ Key? key, @@ -74,6 +75,7 @@ class AppTextFormField extends StatefulWidget { this.showShadow = true, this.showWithoutDecoration = false, this.alignLabelWithHint = false, // Provide default value + this.makeMultiLinesNull = false, this.onTap, this.enableColor, }) : super(key: key); @@ -179,7 +181,7 @@ class _AppTextFormFieldState extends State { onChanged: widget.onChange, obscureText: widget.obscureText ?? false, keyboardType: widget.textInputType, - maxLines: widget.textInputType == TextInputType.multiline ? 4 : 1, + maxLines: widget.makeMultiLinesNull ? null:widget.textInputType == TextInputType.multiline ? 4 : 1, obscuringCharacter: "*", controller: widget.controller, textInputAction: widget.textInputType == TextInputType.multiline ? null : widget.textInputAction ?? TextInputAction.next, diff --git a/lib/new_views/common_widgets/single_item_drop_down_menu.dart b/lib/new_views/common_widgets/single_item_drop_down_menu.dart index f5c4a1d5..6a5b808b 100644 --- a/lib/new_views/common_widgets/single_item_drop_down_menu.dart +++ b/lib/new_views/common_widgets/single_item_drop_down_menu.dart @@ -1,3 +1,4 @@ +import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; import 'package:test_sa/extensions/context_extension.dart'; @@ -6,6 +7,7 @@ import 'package:test_sa/extensions/widget_extensions.dart'; import 'package:test_sa/new_views/common_widgets/app_loading_manager.dart'; import 'package:test_sa/providers/loading_list_notifier.dart'; import 'package:test_sa/views/widgets/bottom_sheets/selection_bottom_sheet.dart'; +import 'package:test_sa/views/widgets/fullscreen_dialogs/selection_fullscreen_dialog.dart'; import '../../models/base.dart'; import '../app_style/app_color.dart'; @@ -16,6 +18,7 @@ class SingleItemDropDownMenu exte final T? initialValue; final bool enabled; final bool showAsBottomSheet; + final bool showAsFullScreenDialog; final List? staticData; final String title; final double? height; @@ -34,6 +37,7 @@ class SingleItemDropDownMenu exte this.enabled = true, this.height, this.showAsBottomSheet = false, + this.showAsFullScreenDialog = false, this.staticData, // Provide a default empty list this.showShadow = true, this.backgroundColor, @@ -140,7 +144,7 @@ class _SingleItemDropDownMenuState( - // Specify return type - context: context, - isScrollControlled: true, - shape: const RoundedRectangleBorder( - borderRadius: BorderRadius.vertical( - top: Radius.circular(20), - ), - ), - clipBehavior: Clip.antiAliasWithSaveLayer, - builder: (BuildContext context) => SelectionBottomSheet( - // Specify generic type - items: ((X == NullableLoadingProvider) ? widget.staticData : provider?.items as List) ?? [], // Provide default empty list if null - selectedItem: _selectedItem, - title: widget.title, - builderString: (emp) => emp?.name ?? "", // Null-aware operator for emp.name - ), - ); - if (selectedT != null) { - setState(() { - _selectedItem = selectedT; - }); - widget.onSelect!(selectedT); // Non-null assertion after null check - } + ).onPress(widget.showAsFullScreenDialog + ? () { + openDialog(); } - : null), + : (widget.showAsBottomSheet + ? () async { + final selectedT = await showModalBottomSheet( + // Specify return type + context: context, + isScrollControlled: true, + shape: const RoundedRectangleBorder( + borderRadius: BorderRadius.vertical( + top: Radius.circular(20), + ), + ), + clipBehavior: Clip.antiAliasWithSaveLayer, + builder: (BuildContext context) => SelectionBottomSheet( + // Specify generic type + items: ((X == NullableLoadingProvider) ? widget.staticData : provider?.items as List) ?? [], // Provide default empty list if null + selectedItem: _selectedItem, + title: widget.title, + builderString: (emp) => emp?.name ?? "", // Null-aware operator for emp.name + ), + ); + if (selectedT != null) { + setState(() { + _selectedItem = selectedT; + }); + widget.onSelect!(selectedT); // Non-null assertion after null check + } + } + : null)), ], ), ], @@ -194,4 +202,28 @@ class _SingleItemDropDownMenuState( + // Specify generic type + items: ((X == NullableLoadingProvider) ? widget.staticData : provider?.items as List) ?? [], // Provide default empty list if null + selectedItem: _selectedItem, + title: widget.title, + builderString: (emp) => emp?.name ?? "", // Null-aware operator for emp.name + ); + + final selectedT = await pushRouter(child); + if (selectedT != null) { + setState(() { + _selectedItem = selectedT; + }); + widget.onSelect!(selectedT); // Non-null assertion after null check + } + } + + Future pushRouter(Widget child) async { + // PageRoute pRoute = !Platform.isIOS ? CupertinoPageRoute(fullscreenDialog: true, builder: (context) => child) : MaterialPageRoute(fullscreenDialog: true, builder: (context) => child); + + return await Navigator.of(context).push(CupertinoPageRoute(fullscreenDialog: true, builder: (context) => child)); + } } diff --git a/lib/new_views/pages/land_page/land_page.dart b/lib/new_views/pages/land_page/land_page.dart index 282963ed..2f4b6921 100644 --- a/lib/new_views/pages/land_page/land_page.dart +++ b/lib/new_views/pages/land_page/land_page.dart @@ -18,6 +18,7 @@ import 'package:test_sa/new_views/pages/land_page/create_request-type_bottomshee import 'package:test_sa/new_views/pages/land_page/mark_attendance_widget.dart'; import 'package:test_sa/new_views/pages/land_page/my_request/my_requests_page.dart'; import 'package:test_sa/new_views/pages/land_page/non_hmg_employee_swipe_view.dart'; +import 'package:test_sa/new_views/pages/login_page.dart'; import 'package:test_sa/new_views/pages/settings_page.dart'; import 'package:test_sa/views/widgets/equipment/single_device_picker.dart'; @@ -131,8 +132,7 @@ class _LandPageState extends State { if (result) { Provider.of(context, listen: false).resetSettings(); Provider.of(context, listen: false).reset(); - Navigator.of(context).pop(); - Navigator.of(context).pop(); + Navigator.of(context).pushNamedAndRemoveUntil(LoginPage.routeName, (routes) => true); } return false; }, diff --git a/lib/new_views/swipe_module/swipe_view.dart b/lib/new_views/swipe_module/swipe_view.dart index 455b3cc0..40eabe46 100644 --- a/lib/new_views/swipe_module/swipe_view.dart +++ b/lib/new_views/swipe_module/swipe_view.dart @@ -9,6 +9,7 @@ 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/common_widgets/app_drawer.dart'; +import 'package:test_sa/new_views/pages/login_page.dart'; import 'package:test_sa/new_views/swipe_module/circular_animated_widget.dart'; import 'package:test_sa/new_views/swipe_module/swipe_history_view.dart'; import 'package:test_sa/new_views/swipe_module/utils/swipe_general_utils.dart'; @@ -56,8 +57,7 @@ class _SwipeViewState extends State { if (result) { Provider.of(context, listen: false).resetSettings(); Provider.of(context, listen: false).reset(); - Navigator.of(context).pop(); - Navigator.of(context).pop(); + Navigator.of(context).pushNamedAndRemoveUntil(LoginPage.routeName, (routes) => true); } return false; }, diff --git a/lib/service_request_latest/views/components/bottom_sheets/service_request_bottomsheet.dart b/lib/service_request_latest/views/components/bottom_sheets/service_request_bottomsheet.dart index 5a53e8b9..150b59d8 100644 --- a/lib/service_request_latest/views/components/bottom_sheets/service_request_bottomsheet.dart +++ b/lib/service_request_latest/views/components/bottom_sheets/service_request_bottomsheet.dart @@ -818,6 +818,7 @@ class ServiceRequestBottomSheet { buttonColor: AppColor.primary10, loading: false, onPressed: () { + Navigator.pop(context); Provider.of(context, listen: false).sparePartHelperModel = SparePartHelperModel(); Navigator.pushReplacement( context, diff --git a/lib/views/pages/user/ppm/ppm_work_order/recurrent_wo/components/task_info_widget.dart b/lib/views/pages/user/ppm/ppm_work_order/recurrent_wo/components/task_info_widget.dart index ee5f5ef5..b2082e8e 100644 --- a/lib/views/pages/user/ppm/ppm_work_order/recurrent_wo/components/task_info_widget.dart +++ b/lib/views/pages/user/ppm/ppm_work_order/recurrent_wo/components/task_info_widget.dart @@ -50,11 +50,11 @@ class RecurrentTaskInfoWidget extends StatelessWidget { mainAxisSize: MainAxisSize.min, crossAxisAlignment: CrossAxisAlignment.start, children: [ - buildingInfoWidget(label: context.translation.department, value: model!.department?.name?.cleanupWhitespace.capitalizeFirstOfEach, context: context), + buildingInfoWidget(label: context.translation.department, value: model?.department?.name?.cleanupWhitespace.capitalizeFirstOfEach, context: context), 8.height, - buildingInfoWidget(label: context.translation.floor, value: model!.floor?.name?.cleanupWhitespace.capitalizeFirstOfEach, context: context), + buildingInfoWidget(label: context.translation.floor, value: model?.floor?.name?.cleanupWhitespace.capitalizeFirstOfEach, context: context), 8.height, - buildingInfoWidget(label: context.translation.room, value: model!.room?.name?.cleanupWhitespace.capitalizeFirstOfEach, context: context), + buildingInfoWidget(label: context.translation.room, value: model?.room?.name?.cleanupWhitespace.capitalizeFirstOfEach, context: context), 8.height, _timerWidget(context, model!.totalWorkingHours!) ], @@ -106,7 +106,7 @@ class RecurrentTaskInfoWidget extends StatelessWidget { } } -Widget buildingInfoWidget({required String label, required String ?value, required BuildContext context}) { +Widget buildingInfoWidget({required String label, required String value, required BuildContext context}) { return Column( mainAxisAlignment: MainAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start, @@ -125,11 +125,3 @@ Widget buildingInfoWidget({required String label, required String ?value, requir ).toShadowContainer(context, backgroundColor: AppColor.neutral100, borderRadius: 10, paddingObject: EdgeInsets.all(12.toScreenHeight), showShadow: false); } -class DummyModel { - RequestsDetails? request; - Ppm? ppm; - TimerModel? timerModel = TimerModel(); - double totalWorkingHours = 2; - - DummyModel(this.request, this.ppm, this.timerModel, this.totalWorkingHours); -} diff --git a/lib/views/pages/user/ppm/update_ppm/ppm_pm_check_list_form.dart b/lib/views/pages/user/ppm/update_ppm/ppm_pm_check_list_form.dart index e357c36b..f8c55d5d 100644 --- a/lib/views/pages/user/ppm/update_ppm/ppm_pm_check_list_form.dart +++ b/lib/views/pages/user/ppm/update_ppm/ppm_pm_check_list_form.dart @@ -1,7 +1,6 @@ import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; import 'package:test_sa/controllers/providers/api/ppm_provider.dart'; -import 'package:test_sa/controllers/providers/settings/setting_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'; @@ -57,6 +56,7 @@ class _PpmPmChecklistFormState extends State { initialValue: list[index].instructionText?.text ?? "", enable: false, showShadow: false, + makeMultiLinesNull: true, enableColor: AppColor.neutral100, backgroundColor: context.isDark ? AppColor.neutral20 : AppColor.neutral100, // backgroundColor: context.isDark ? AppColor.neutral50 : null, @@ -94,7 +94,8 @@ class _PpmPmChecklistFormState extends State { labelText: "Task Comment".addTranslation, labelStyle: AppTextStyles.tinyFont.copyWith(color: context.isDark ? AppColor.neutral30 : AppColor.neutral120, fontWeight: FontWeight.w500), initialValue: list[index].taskComment ?? "", - // enable: false, + textInputType: TextInputType.multiline, + makeMultiLinesNull: true, backgroundColor: context.isDark ? AppColor.neutral20 : AppColor.neutral100, showShadow: false, onChange: (text) { diff --git a/lib/views/widgets/fullscreen_dialogs/selection_fullscreen_dialog.dart b/lib/views/widgets/fullscreen_dialogs/selection_fullscreen_dialog.dart new file mode 100644 index 00000000..5cdc5429 --- /dev/null +++ b/lib/views/widgets/fullscreen_dialogs/selection_fullscreen_dialog.dart @@ -0,0 +1,127 @@ +import 'package:flutter/material.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/common_widgets/app_filled_button.dart'; + +typedef SelectionBuilderString = String Function(dynamic); + +class SelectionFullScreenDialog extends StatefulWidget { + final List? items; + final T? selectedItem; // Now nullable + final String title; + final SelectionBuilderString builderString; + + const SelectionFullScreenDialog({Key? key, this.items, this.selectedItem, this.title = "", required this.builderString}) : super(key: key); + + @override + _SelectionBottomSheetState createState() => _SelectionBottomSheetState(); +} + +class _SelectionBottomSheetState extends State> { + T? _selectedValue; // Now nullable + + String query = ""; + + List? get filteredList => widget.items?.where((element) => widget.builderString(element).toLowerCase().contains(query.toLowerCase())).toList(); + + @override + void initState() { + _selectedValue = widget.selectedItem; + super.initState(); + } + + FocusNode searchFocusNode = FocusNode(); + + @override + void dispose() { + searchFocusNode.dispose(); + super.dispose(); + } + + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: AppBar(title: widget.title.heading5(context)), + body: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + SearchBar( + focusNode: searchFocusNode, + elevation: WidgetStateProperty.all(0), + leading: const Icon(Icons.search, color: AppColor.neutral50), + textStyle: WidgetStateProperty.all( + const TextStyle(color: AppColor.neutral50, fontSize: 16.0), + ), + hintStyle: WidgetStateProperty.all( + const TextStyle(color: AppColor.neutral20, fontSize: 14.0), + ), + hintText: 'Search by name', + onChanged: (queryString) { + query = queryString; + setState(() {}); + }, + ).paddingOnly(top: 16, start: 16, end: 16, bottom: 8), + // TextField( + // onChanged: (queryString) { + // query = queryString; + // setState(() {}); + // }, + // style: const TextStyle(fontSize: 14), + // focusNode: searchFocusNode, + // decoration: InputDecoration( + // hintText: 'Search by name', + // labelText: 'Search', + // hintStyle: const TextStyle(fontSize: 14), + // focusedBorder: OutlineInputBorder( + // borderSide: BorderSide(color: AppColor.blueStatus(context), width: 2.0), + // borderRadius: const BorderRadius.all(Radius.circular(12.0)), + // ), + // enabledBorder: OutlineInputBorder( + // borderSide: BorderSide(color: AppColor.blueStatus(context), width: 1.0), + // borderRadius: const BorderRadius.all(Radius.circular(12.0)), + // ), + // contentPadding: const EdgeInsets.symmetric(vertical: 8.0, horizontal: 16.0), + // ), + // ), + 8.height, + Expanded( + child: ListView.builder( + itemCount: filteredList?.length, + padding: EdgeInsets.zero, + itemBuilder: (cxt, index) => RadioListTile( + // Specify type for RadioListTile + value: filteredList![index], + dense: true, + contentPadding: const EdgeInsets.only(left: 16, right: 16), + groupValue: _selectedValue, + activeColor: Colors.black87, + hoverColor: Colors.transparent, + onChanged: (value) { + _selectedValue = value; + searchFocusNode.unfocus(); + setState(() {}); + }, + title: Text( + widget.builderString(filteredList![index]).cleanupWhitespace.capitalizeFirstOfEach ?? "", + style: Theme.of(context).textTheme.bodyLarge, + ), + ), + ), + ), + 8.height, + if (_selectedValue != null) + AppFilledButton( + label: context.translation.select, + maxWidth: true, + onPressed: () { + Navigator.pop(context, _selectedValue); + }, + ).paddingAll(16), + ], + ), + ); + } +}