diff --git a/.dart_tool/package_config.json b/.dart_tool/package_config.json index ac759af..e356a5b 100644 --- a/.dart_tool/package_config.json +++ b/.dart_tool/package_config.json @@ -332,7 +332,7 @@ "languageVersion": "3.6" } ], - "generated": "2025-02-07T12:15:28.694039Z", + "generated": "2025-02-07T12:18:47.126414Z", "generator": "pub", "generatorVersion": "3.6.0", "flutterRoot": "file:///C:/Users/Admin/Downloads/flutter_windows_3.27.1-stable/flutter", diff --git a/lib/components/common/custom_drop_down.dart b/lib/components/common/custom_drop_down.dart index eadff8e..e90345a 100644 --- a/lib/components/common/custom_drop_down.dart +++ b/lib/components/common/custom_drop_down.dart @@ -1,6 +1,4 @@ import 'package:flutter/material.dart'; -import 'package:get/get.dart'; - import 'package:shayog/components/styles/app_colors.dart'; import 'package:shayog/components/styles/textStyles.dart'; @@ -8,7 +6,8 @@ class CustomDropdown extends StatefulWidget { final List items; final String Function(T) itemLabel; final Function(T?) onSelected; - final String hintText; + VoidCallback? onTap; + late final String hintText; final bool enableSearch; final double? width; final EdgeInsetsGeometry padding; @@ -18,8 +17,9 @@ class CustomDropdown extends StatefulWidget { final Color? borderClr; final Color? backClr; final String? Function(T?)? validator; + Widget? icon; - const CustomDropdown({ + CustomDropdown({ super.key, required this.items, required this.itemLabel, @@ -34,6 +34,8 @@ class CustomDropdown extends StatefulWidget { this.borderClr, this.backClr, this.validator, + this.onTap, + this.icon, }); @override @@ -77,8 +79,6 @@ class _CustomDropdownState extends State> { }); } - - void _selectItem(T item) { setState(() { selectedItem = item; @@ -98,7 +98,13 @@ class _CustomDropdownState extends State> { _openDropdown(); } } + void clearField() { + setState(() { + selectedItem = null; // Clear the selected item + }); + _openDropdown(); + } void _openDropdown() { setState(() { isSearching = false; @@ -198,6 +204,7 @@ class _CustomDropdownState extends State> { style: 11.txtSBoldGrey, ), ), + // onTap: widget.onTap, onTap: () => _selectItem(item), ); }, @@ -226,30 +233,9 @@ class _CustomDropdownState extends State> { overlayEntry!.markNeedsBuild(); } } - // String? validateAndGetErrorText() { - // setState(() { - // _errorText = widget.validator?.call(selectedItem); - // }); - // return _errorText; - // } - String? validateAndGetErrorText() { - setState(() { - _errorText = selectedItem == null ? "This field is required" : null; - }); - return _errorText; - } - void _onDropdownTap() { - if (selectedItem == null) { - setState(() { - _errorText = "Please select an item."; - }); - } else { - setState(() { - _errorText = null; - }); - } - _toggleDropdown(); - } + + + @override Widget build(BuildContext context) { return Column( @@ -258,7 +244,7 @@ class _CustomDropdownState extends State> { CompositedTransformTarget( link: layerLink, child: GestureDetector( - onTap: _toggleDropdown, + onTap: _toggleDropdown, child: Container( padding: EdgeInsets.symmetric( vertical: widget.isHeight ? 12 : 6.4, horizontal: 16), @@ -277,338 +263,38 @@ class _CustomDropdownState extends State> { Expanded( child: Text( widget.hintText, - // selectedItem != null - // ? widget.itemLabel(selectedItem as T) - // : widget.hintText, + + // selectedItem == null ? widget.hintText : widget.itemLabel(selectedItem as T), + + style: 11.txtSBoldGrey, overflow: TextOverflow.ellipsis, ), - // Text( - // selectedItem != null - // ? widget.itemLabel(selectedItem as T) - // : widget.hintText, - // style: 12.txtSBoldGrey, - // overflow: TextOverflow.ellipsis, - // ), + ), - const Icon( - Icons.keyboard_arrow_down_outlined, - size: 20, - color: Colors.black, - ), - ], - ), - ), - ), - ), - if (_errorText != null) - Padding( - padding: const EdgeInsets.only(top: 8.0), - child: Text( - _errorText!, - style: TextStyle( - color: Colors.red, - fontSize: 12, - ), - ), - ) - ], - ); - } -} - - -class CustomDrop extends StatefulWidget { - final List items; - final String Function(T) itemLabel; - final Function(T?) onSelected; - final RxString hintText; - final bool enableSearch; - final double? width; - final EdgeInsetsGeometry padding; - final T? initialValue; - final bool showError; - final bool isHeight; - final Color? borderClr; - final Color? backClr; - final String? Function(T?)? validator; - - const CustomDrop({ - super.key, - required this.items, - required this.itemLabel, - required this.onSelected, - required this.hintText, - this.enableSearch = true, - this.width, - this.padding = const EdgeInsets.all(8.0), - this.initialValue, - this.showError = false, - this.isHeight = false, - this.borderClr, - this.backClr, - this.validator, - }); - - @override - _CustomDropdownState createState() => _CustomDropdownState(); -} - -class _CustomDropState extends State> { - T? selectedItem; - String? _errorText; - List filteredItems = []; - late TextEditingController searchController; - OverlayEntry? overlayEntry; - final LayerLink layerLink = LayerLink(); - bool isDropdownOpen = false; - bool isSearching = false; - final dropdownKey = GlobalKey<_CustomDropdownState>(); - - @override - void initState() { - super.initState(); - searchController = TextEditingController(); - filteredItems = List.from(widget.items); - - if (widget.initialValue != null) { - selectedItem = widget.initialValue; - } - - searchController.addListener(() { - final text = searchController.text; - if (text.isEmpty) { - setState(() { - isSearching = false; - filteredItems = List.from(widget.items); - }); - } else { - setState(() { - isSearching = true; - _filterList(text); - }); - } - }); - } - - - - void _selectItem(T item) { - setState(() { - selectedItem = item; - isDropdownOpen = false; - _errorText = null; // Clear error when an item is selected - }); - searchController.clear(); - widget.onSelected(item); - _closeDropdown(); - filteredItems = List.from(widget.items); - } - - void _toggleDropdown() { - if (isDropdownOpen) { - _closeDropdown(); - } else { - _openDropdown(); - } - } - - void _openDropdown() { - setState(() { - isSearching = false; - filteredItems = List.from(widget.items); - searchController.clear(); - }); - - overlayEntry = _createOverlayEntry(); - Overlay.of(context).insert(overlayEntry!); - - setState(() { - isDropdownOpen = true; - }); - } - - void _closeDropdown() { - overlayEntry?.remove(); - overlayEntry = null; - setState(() { - isDropdownOpen = false; - }); - } - - OverlayEntry _createOverlayEntry() { - final RenderBox renderBox = context.findRenderObject() as RenderBox; - - return OverlayEntry( - builder: (context) { - return GestureDetector( - behavior: HitTestBehavior.opaque, - onTap: _closeDropdown, - child: Stack( - children: [ - Positioned( - width: widget.width ?? 250, - child: CompositedTransformFollower( - link: layerLink, - showWhenUnlinked: false, - offset: Offset(0, renderBox.size.height + 5), - child: Material( - elevation: 4, - borderRadius: BorderRadius.circular(8), - child: Container( - padding: EdgeInsets.all(8.0), - decoration: BoxDecoration( - color: Colors.white, - borderRadius: BorderRadius.circular(8), - border: Border.all( - color: Colors.grey, - width: 1, - ), - ), - child: Column( - mainAxisSize: MainAxisSize.min, - children: [ - if (widget.enableSearch && widget.items.length > 1) - Padding( - padding: const EdgeInsets.only(bottom: 8.0), - child: SizedBox( - height: 32, - child: TextFormField( - // validator: widget.validator, - enabled: widget.enableSearch, - controller: searchController, - style: 12.txtSBoldGrey, - autovalidateMode: - AutovalidateMode.onUserInteraction, - decoration: InputDecoration( - hintText: 'Search...', - contentPadding: const EdgeInsets.symmetric( - vertical: 8.0, - horizontal: 12.0, - ), - border: OutlineInputBorder( - borderRadius: BorderRadius.circular(8), - ), - ), - ), - ), - ), - Container( - constraints: BoxConstraints(maxHeight: 200), - child: ListView.builder( - shrinkWrap: true, - itemCount: filteredItems.length, - itemBuilder: (context, index) { - final item = filteredItems[index]; - return ListTile( - contentPadding: EdgeInsets.all(0), - minVerticalPadding: 0, - dense: true, - visualDensity: VisualDensity.compact, - title: Tooltip( - message: widget.itemLabel(item), - child: Text( - widget.itemLabel(item), - style: 11.txtSBoldGrey, - ), - ), - onTap: () => _selectItem(item), - ); - }, - ), + // selectedItem != null + // ? InkWell( + // onTap: (){ + // setState(() { + // + // selectedItem = null; + // + // }); + // + // _openDropdown(); + // }, + // + // child: + // Icon(Icons.close, size: 14, color: Colors.black)) + // : + widget.icon ?? InkWell( + onTap: _toggleDropdown, + child: Icon( + Icons.keyboard_arrow_down_outlined, + size: 20, + color: Colors.black, ), - ], - ), - ), - ), - ), - ), - ], - ), - ); - }, - ); - } - - void _filterList(String query) { - filteredItems = widget.items - .where((item) => - widget.itemLabel(item).toLowerCase().contains(query.toLowerCase())) - .toList(); - - if (overlayEntry != null) { - overlayEntry!.markNeedsBuild(); - } - } - // String? validateAndGetErrorText() { - // setState(() { - // _errorText = widget.validator?.call(selectedItem); - // }); - // return _errorText; - // } - String? validateAndGetErrorText() { - setState(() { - _errorText = selectedItem == null ? "This field is required" : null; - }); - return _errorText; - } - void _onDropdownTap() { - if (selectedItem == null) { - setState(() { - _errorText = "Please select an item."; - }); - } else { - setState(() { - _errorText = null; - }); - } - _toggleDropdown(); - } - @override - Widget build(BuildContext context) { - return Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - CompositedTransformTarget( - link: layerLink, - child: GestureDetector( - onTap: _toggleDropdown, - child: Container( - padding: EdgeInsets.symmetric( - vertical: widget.isHeight ? 12 : 6.4, horizontal: 16), - decoration: BoxDecoration( - color: widget.backClr ?? AppColors.white, - border: Border.all( - color: widget.borderClr ?? Colors.transparent, - width: 1, - ), - borderRadius: BorderRadius.circular(2), - ), - child: Row( - crossAxisAlignment: CrossAxisAlignment.center, - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - Expanded( - child: Text( - selectedItem != null - ? widget.itemLabel(selectedItem as T) - : widget.hintText.value, - style: 11.txtSBoldGrey, - overflow: TextOverflow.ellipsis, - ), - // Text( - // selectedItem != null - // ? widget.itemLabel(selectedItem as T) - // : widget.hintText, - // style: 12.txtSBoldGrey, - // overflow: TextOverflow.ellipsis, - // ), - ), - const Icon( - Icons.keyboard_arrow_down_outlined, - size: 20, - color: Colors.black, - ), + ), ], ), ), diff --git a/lib/components/common/drop_down_ctrl.dart b/lib/components/common/drop_down_ctrl.dart new file mode 100644 index 0000000..c6bcaa8 --- /dev/null +++ b/lib/components/common/drop_down_ctrl.dart @@ -0,0 +1,16 @@ +import 'package:get/get.dart'; + +class DropdownController extends GetxController { + // Observable selected item + var selectedItem = Rxn(); // Replace `String` with your actual type if necessary + + // Set the selected value + void selectItem(String item) { + selectedItem.value = item; + } + + // Clear the selected value + void clearSelection() { + selectedItem.value = null; + } +} diff --git a/lib/components/common/drop_down_feild.dart b/lib/components/common/drop_down_feild.dart new file mode 100644 index 0000000..7b14c4c --- /dev/null +++ b/lib/components/common/drop_down_feild.dart @@ -0,0 +1,51 @@ +// import 'package:flutter/material.dart'; +// import 'package:get/get.dart'; +// +// import 'drop_down_ctrl.dart'; +// +// class Customdown extends StatelessWidget { +// // Instantiate the controller using Get.put() to make it accessible across the app +// final DropdownController dropdownController = Get.put(DropdownController()); +// +// @override +// Widget build(BuildContext context) { +// +// +// return Obx( +// () { +// return GestureDetector( +// onTap: () async { +// // Open the custom dropdown menu on tap +// String? selectedItem = await showMenu( +// context: context, +// position: RelativeRect.fromLTRB(100.0, 100.0, 100.0, 100.0), +// items: dropdownController.items +// .map((String value) { +// return PopupMenuItem( +// value: value, +// child: Text(value), +// ); +// }) +// .toList(), +// ); +// // Update the selected value using GetX when the user selects an item +// if (selectedItem != null) { +// dropdownController.updateValue(selectedItem); +// } +// }, +// child: Container( +// padding: EdgeInsets.symmetric(horizontal: 20, vertical: 10), +// decoration: BoxDecoration( +// border: Border.all(color: Colors.blue), +// borderRadius: BorderRadius.circular(5), +// ), +// child: Text( +// dropdownController.selectedValue.value, // Reactive update +// style: TextStyle(fontSize: 18, color: Colors.black), +// ), +// ), +// ); +// }, +// ); +// } +// } \ No newline at end of file diff --git a/lib/feature/presentation/screens/admin/user_management/manage_user.dart b/lib/feature/presentation/screens/admin/user_management/manage_user.dart index fce832c..c4b4ba7 100644 --- a/lib/feature/presentation/screens/admin/user_management/manage_user.dart +++ b/lib/feature/presentation/screens/admin/user_management/manage_user.dart @@ -6,6 +6,7 @@ import '../../../../../components/common/common_btn.dart'; import '../../../../../components/common/common_button.dart'; import '../../../../../components/common/custom_drop_down.dart'; import '../../../../../components/common/data_cell.dart'; + import '../../../../../components/styles/app_colors.dart'; import '../../../../../components/styles/app_strings.dart'; import '../../../widgets/custom_pagination.dart'; @@ -43,19 +44,29 @@ class ManageUser extends StatelessWidget { text: "User Name", ), SizedBox(height: 4), - GetX( - builder: (ctrl) { - return CustomDropdown( - backClr: AppColors.clrD9, - borderClr: AppColors.clrGrey, - items: ctrl.userNames, - itemLabel: (item) => item, - onSelected: (selected) { - ctrl.selectUser.value = selected; - }, - hintText: ctrl.selectUser.value); - }, - ), + CustomDropdown( + icon: controller.selectUser.value == + "Select User Name" + ?Icon( + Icons.keyboard_arrow_down_outlined, + size: 20, + color: Colors.black, + ) : GestureDetector( + onTap: () { + controller.selectUser.value = + "Select User Name"; + }, + child: Icon(Icons.close,size: 14)), + + backClr: AppColors.clrD9, + borderClr: AppColors.clrGrey, + items: controller.userNames, + itemLabel: (item) => item, + onSelected: (selected) { + controller.selectUser.value = + selected ?? ""; + }, + hintText: controller.selectUser.value), ], )), SizedBox(width: 16), @@ -68,19 +79,27 @@ class ManageUser extends StatelessWidget { text: "User Type", ), SizedBox(height: 8), - GetX( - builder: (controller) { - return CustomDropdown( - backClr: AppColors.clrD9, - borderClr: AppColors.clrGrey, - items: controller.userTypesNames, - itemLabel: (item) => item, - onSelected: (selected) { - controller.selectType.value = selected; + CustomDropdown( + icon: controller.selectType.value == + "Select UserType" + ?Icon( + Icons.keyboard_arrow_down_outlined, + size: 20, + color: Colors.black, + ) : GestureDetector( + onTap: () { + controller.selectType.value = + "Select UserType"; }, - hintText: controller.selectType.value); - }, - ), + child: Icon(Icons.close,size: 14)), + backClr: AppColors.clrD9, + borderClr: AppColors.clrGrey, + items: controller.userTypesNames, + itemLabel: (item) => item, + onSelected: (selected) { + controller.selectType.value = selected; + }, + hintText: controller.selectType.value), ], )), SizedBox(width: 16), @@ -94,13 +113,24 @@ class ManageUser extends StatelessWidget { ), SizedBox(height: 8), CustomDropdown( + icon: controller.selectEmail.value == + "Select Email" + ?Icon( + Icons.keyboard_arrow_down_outlined, + size: 20, + color: Colors.black, + ) : GestureDetector( + onTap: () { + controller.selectEmail.value = + "Select Email"; + }, + child: Icon(Icons.close,size: 14)), backClr: AppColors.clrD9, borderClr: AppColors.clrGrey, items: controller.userEmail, itemLabel: (item) => item, onSelected: (selected) { controller.selectEmail.value = selected; - }, hintText: controller.selectEmail.value), ], @@ -120,6 +150,18 @@ class ManageUser extends StatelessWidget { ), SizedBox(height: 8), CustomDropdown( + icon: controller.selectCode.value == + "Select Employee Code" + ?Icon( + Icons.keyboard_arrow_down_outlined, + size: 20, + color: Colors.black, + ) : GestureDetector( + onTap: () { + controller.selectCode.value = + "Select Employee Code"; + }, + child: Icon(Icons.close,size: 14)), backClr: AppColors.clrD9, borderClr: AppColors.clrGrey, items: controller.userEmpCode, @@ -141,7 +183,18 @@ class ManageUser extends StatelessWidget { ), SizedBox(height: 8), CustomDropdown( - + icon: controller.selectUserStatus.value == + "Select Status" + ?Icon( + Icons.keyboard_arrow_down_outlined, + size: 20, + color: Colors.black, + ) : GestureDetector( + onTap: () { + controller.selectUserStatus.value = + "Select Status"; + }, + child: Icon(Icons.close,size: 14)), backClr: AppColors.clrD9, borderClr: AppColors.clrGrey, items: controller.userStatus, @@ -179,7 +232,6 @@ class ManageUser extends StatelessWidget { text: AppStrings.submit, textStyle: 14.txtSBoldWhite, clickAction: () { - //controller.isSelected.value = false; controller.getManageUser(); controller.getAllUser(); }, @@ -211,7 +263,7 @@ class ManageUser extends StatelessWidget { decoration: BoxDecoration(border: Border.all(color: AppColors.clrGrey)), child: RawScrollbar( - thumbColor: AppColors.clrD9, + thumbColor: AppColors.primaryClr.withOpacity(0.4), radius: Radius.circular(2), trackVisibility: true, thumbVisibility: true, @@ -220,7 +272,7 @@ class ManageUser extends StatelessWidget { child: SingleChildScrollView( controller: controller.verticalScrollController, child: RawScrollbar( - thumbColor: AppColors.clrD9, + thumbColor: AppColors.primaryClr.withOpacity(0.4), radius: Radius.circular(2), thickness: 14, trackVisibility: true, diff --git a/lib/feature/presentation/screens/dashboard/controller/dashboard_ctrl.dart b/lib/feature/presentation/screens/dashboard/controller/dashboard_ctrl.dart index 27a84a2..f6de1f8 100644 --- a/lib/feature/presentation/screens/dashboard/controller/dashboard_ctrl.dart +++ b/lib/feature/presentation/screens/dashboard/controller/dashboard_ctrl.dart @@ -111,6 +111,7 @@ class DashboardCtrl extends GetxController { RxList getAllUserMain = [].obs; RxInt limit = 20.obs; var userLoading = false.obs; + var changeColor = false.obs; setNextPage() { if (currentPage.value < totalPages.value.toInt()) { diff --git a/lib/feature/presentation/screens/transporter/invoice_management/payment_view/payment_view_screen.dart b/lib/feature/presentation/screens/transporter/invoice_management/payment_view/payment_view_screen.dart index 686c20b..e71bef3 100644 --- a/lib/feature/presentation/screens/transporter/invoice_management/payment_view/payment_view_screen.dart +++ b/lib/feature/presentation/screens/transporter/invoice_management/payment_view/payment_view_screen.dart @@ -1,5 +1,6 @@ import 'package:flutter/material.dart'; import 'package:get/get.dart'; +import 'package:intl/intl.dart'; import 'package:shayog/components/common/input_field.dart'; import 'package:shayog/components/styles/textStyles.dart'; import 'package:shayog/feature/presentation/screens/transporter/invoice_management/payment_view/ctrl/payment_view_ctrl.dart'; @@ -27,7 +28,7 @@ class PaymentView extends StatelessWidget { () => controller.isPaymentFilter.value ? Container( padding: const EdgeInsets.only( - left: 16.0, top: 8, right: 16, bottom: 16), + left: 16.0, top: 8, right: 16), color: AppColors.clrF2, child: Column( mainAxisAlignment: MainAxisAlignment.start, @@ -42,17 +43,68 @@ class PaymentView extends StatelessWidget { children: [ TextView(text: "Plant"), SizedBox(height: 8), - CustomDropdown( + + CustomDropdown( + icon: paymentCtrl.selectedPlant.value == + "Select Plant" + ? Icon( + Icons.keyboard_arrow_down_outlined, + size: 20, + color: Colors.black, + ) : GestureDetector( + onTap: () { + paymentCtrl.selectedPlant.value = + "Select Plant"; + }, + child: Icon(Icons.close,size: 14)), + + backClr: AppColors.clrD9, + borderClr: AppColors.clrGrey, + items: paymentCtrl.plant, + itemLabel: (item) => + "${item.plantCode} - ${item.plantDesc}", + onSelected: (selected) { + paymentCtrl.selectedPlant.value = + "${selected?.plantCode} - ${selected?.plantDesc}"; + }, + hintText: paymentCtrl.selectedPlant.value, + ), + + ], + ), + ), + SizedBox(width: 16), + Expanded( + child: Column( + mainAxisAlignment: MainAxisAlignment.start, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + TextView(text: "Product"), + SizedBox(height: 8), + CustomDropdown( + icon: paymentCtrl.selectedProduct.value == + "Select Product Name" + ? Icon( + Icons.keyboard_arrow_down_outlined, + size: 20, + color: Colors.black, + ) : GestureDetector( + onTap: () { + paymentCtrl.selectedProduct.value = + "Select Product Name"; + }, + child: Icon(Icons.close,size: 14)), + width: 250, backClr: AppColors.clrD9, borderClr: AppColors.clrGrey, - items: paymentCtrl.plant, + items: paymentCtrl.product, itemLabel: (item) => - "${item.plantCode}-${item.plantDesc}", + "${item.materialCode} - ${item.materialDescription}", onSelected: (selected) { - paymentCtrl.selectedPlant.value = - "${selected?.plantCode}-${selected?.plantDesc}"; + paymentCtrl.selectedProduct.value = + "${selected.materialCode} - ${selected.materialDescription}"; }, - hintText: paymentCtrl.selectedPlant.value, + hintText: paymentCtrl.selectedProduct.value, ), ], ), @@ -66,11 +118,22 @@ class PaymentView extends StatelessWidget { TextView(text: "Freight Bill No."), SizedBox(height: 8), CustomDropdown( + icon: paymentCtrl.selectedFreightBill.value == + "Select Bill No." + ? Icon( + Icons.keyboard_arrow_down_outlined, + size: 20, + color: Colors.black, + ) : GestureDetector( + onTap: () { + paymentCtrl.selectedFreightBill.value = + "Select Bill No."; + }, + child: Icon(Icons.close,size: 14)), backClr: AppColors.clrD9, borderClr: AppColors.clrGrey, items: paymentCtrl.freightBill, itemLabel: (item) => item, - onSelected: (selected) { paymentCtrl.selectedFreightBill.value = selected.toString(); @@ -81,30 +144,7 @@ class PaymentView extends StatelessWidget { ], ), ), - SizedBox(width: 16), - Expanded( - child: Column( - mainAxisAlignment: MainAxisAlignment.start, - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - TextView(text: "Product"), - SizedBox(height: 8), - CustomDropdown( - width: 250, - backClr: AppColors.clrD9, - borderClr: AppColors.clrGrey, - items: paymentCtrl.product, - itemLabel: (item) => - "${item.materialCode}-${item.materialDescription}", - onSelected: (selected) { - paymentCtrl.selectedProduct.value = - "${selected.materialCode}-${selected.materialDescription}"; - }, - hintText: paymentCtrl.selectedProduct.value, - ), - ], - ), - ), + ], ), SizedBox(height: 12), @@ -189,11 +229,10 @@ class PaymentView extends StatelessWidget { ? CircularProgressIndicator() : Container( margin: EdgeInsets.only(bottom: 16, top: 8), - // height: MediaQuery.of(context).size.height * 0.4, - decoration: BoxDecoration( + decoration: BoxDecoration( border: Border.all(color: AppColors.clrGrey)), child: RawScrollbar( - thumbColor: AppColors.clrD9, + thumbColor: AppColors.primaryClr.withOpacity(0.4), radius: Radius.circular(2), trackVisibility: true, thumbVisibility: true, @@ -202,7 +241,7 @@ class PaymentView extends StatelessWidget { child: SingleChildScrollView( controller: paymentCtrl.verticalScrollController, child: RawScrollbar( - thumbColor: AppColors.clrD9, + thumbColor: AppColors.primaryClr.withOpacity(0.4), radius: Radius.circular(2), thickness: 14, trackVisibility: true, @@ -274,8 +313,13 @@ class PaymentView extends StatelessWidget { index, "${stoppage.materialCode}"), editableCell( index, "${stoppage.freightbillCode}"), + editableCell( - index, "${stoppage.lastUpdatedOn}"), + index, + DateFormat('yyyy - MMM dd').format( + DateTime.parse(stoppage + .lastUpdatedOn + .toString()))), editableCell( index, "${stoppage.shipmentNetQty}"), diff --git a/lib/feature/presentation/screens/transporter/view/sub_views/invoice_management_screen.dart b/lib/feature/presentation/screens/transporter/view/sub_views/invoice_management_screen.dart index cdd2758..c0a5a8b 100644 --- a/lib/feature/presentation/screens/transporter/view/sub_views/invoice_management_screen.dart +++ b/lib/feature/presentation/screens/transporter/view/sub_views/invoice_management_screen.dart @@ -41,327 +41,83 @@ class _TransportViewState extends State { return Column( children: [ Container( - padding: EdgeInsets.only(bottom: 4), - margin: EdgeInsets.all(16), - child: Column( + margin: EdgeInsets.symmetric(horizontal: 16, vertical: 8), + height: 50, + color: AppColors.primaryClr, + child: Row( children: [ - Container( - margin: EdgeInsets.only(bottom: 12), - height: 55, - color: AppColors.primaryClr, - child: Row( - children: [ - ListView.separated( - padding: EdgeInsets.symmetric(horizontal: 16), - scrollDirection: Axis.horizontal, - shrinkWrap: true, - itemBuilder: (context, index) { - return Obx( - () => InkWell( - onTap: () { - ctrl.selectedState.value = index; - }, - child: Container( - margin: EdgeInsets.only(bottom: 10, top: 10), - decoration: BoxDecoration( - border: Border( - bottom: BorderSide( - color: ctrl.selectedState.value == - index - ? Colors.white - : AppColors.primaryClr, - width: 3))), - child: Center( - child: Text( - ctrl.userTabs[index].title ?? "", - style: TextStyle( - fontSize: 12, - fontWeight: FontWeight.w900, - color: Colors.white), - ), - ), - ), - ), - ); - }, - separatorBuilder: (context, index) { - return SizedBox(width: 16); - }, - itemCount: ctrl.userTabs.length), - Spacer(), - InkWell( - child: Image.asset(AppImages.refresh, - height: 10, width: 10)), - Padding( - padding: const EdgeInsets.all(8.0), - child: Text( - AppStrings.refresh, - style: TextStyle( - color: AppColors.white, - fontSize: 10, - fontWeight: FontWeight.normal), - ), - ), - GestureDetector( - behavior: HitTestBehavior.translucent, + ListView.separated( + shrinkWrap: true, + padding: EdgeInsets.symmetric(horizontal: 16), + scrollDirection: Axis.horizontal, + itemBuilder: (context, index) { + return Obx( + () => InkWell( onTap: () { - print("cdgsa"); - ctrl.isSelected.value = !ctrl.isSelected.value; - // if (ctrl.isSelected.value == 0) { - // ctrl.toggleFilter(); - // } else if (ctrl.isSelected.value == 1) { - // ctrl.toggleViewFreight(); - // } else if (ctrl.isSelected.value == 2) { - // ctrl.togglePending(); - // } + ctrl.selectedState.value = index; }, - child: Row( - children: [ - Image.asset(AppImages.filter, - height: 16, width: 16), - Padding( - padding: const EdgeInsets.all(8.0), - child: TextView( - text: AppStrings.filter, - style: 12.txtBoldWhite, - ), + child: Container( + margin: EdgeInsets.only(bottom: 10, top: 10), + decoration: BoxDecoration( + border: Border( + bottom: BorderSide( + color: ctrl.selectedState.value == index + ? Colors.white + : AppColors.primaryClr, + width: 3))), + child: Center( + child: TextView( + text: ctrl.invoiceTabs[index].title ?? "", + style: 12.txtBoldWhite, ), - ], + ), ), ), - ], + ); + }, + separatorBuilder: (context, index) { + return SizedBox(width: 16); + }, + itemCount: ctrl.invoiceTabs.length, + ), + Spacer(), + InkWell( + onTap: (){ + paymentCtrl.resetDropdowns(); + }, + child: Image.asset(AppImages.refresh, height: 16, width: 16)), + Padding( + padding: const EdgeInsets.all(8.0), + child: Text( + AppStrings.refresh, + style: 12.txtBoldWhite, + ), + ), + InkWell( + onTap: () { + switch (ctrl.selectedState.value) { + case 0: + return ctrl.invoiceFilter(); + case 1: + return ctrl.cancelledFilter(); + case 2: + return ctrl.paymentFilter(); + default: + return ctrl.ccnFilter(); + } + }, + child: Image.asset(AppImages.filter, height: 16, width: 16), + ), + Padding( + padding: const EdgeInsets.all(8.0), + child: TextView( + text: AppStrings.filter, + style: 12.txtBoldWhite, ), ), ], ), ), - Obx( - () => ctrl.isSelected.value - ? Container( - padding: EdgeInsets.all(8), - color: AppColors.clrF2, - - child: Column( - mainAxisAlignment: MainAxisAlignment.start, - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Row( - children: [ - Expanded( - child: Column( - mainAxisAlignment: MainAxisAlignment.start, - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - TextView(text: "Plant", isRequired: true), - SizedBox(height: 8), - CustomDropdown( - backClr: AppColors.clrD9, - borderClr: AppColors.clrGrey, - items: ctrl.plant, - - itemLabel: (item) => - "${item.plantCode} - ${item.plantDesc}", - onSelected: (selected) { - if (selected != null) { - ctrl.selectPlantFreight.value = - selected.plantCode ?? ""; - ctrl.showPlantErrorFreight.value = - false; - } - }, - hintText: "Select Plant", - ), - Obx(() => - ctrl.showPlantErrorFreight.value - ? Text( - 'Required', - style: TextStyle( - color: Colors.red, - fontSize: 12), - ) - : Text('')), - ], - ), - ), - SizedBox(width: 16), - Expanded( - child: Column( - mainAxisAlignment: MainAxisAlignment.start, - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - TextView(text: "Freight Bill Date",isRequired: true,), - Container( - height: 35, - child: TextFormField( - key: ctrl.fromTextFieldKey, - controller: ctrl.fromController, - onTap: () async { - final pickedDate = - await showWebDatePicker( - width: 20.w, - context: ctrl - .fromTextFieldKey.currentContext!, - initialDate: - ctrl.fromSelectedDate, - firstDate: DateTime(2000), - lastDate: DateTime.now(), - ); - - if (pickedDate != null) { - ctrl.fromSelectedDate = - pickedDate; - String formattedDate = ctrl - .getFormattedDate(pickedDate); - ctrl.fromController.text = - formattedDate; - ctrl.dateCheck.value = true; - } - }, - decoration: InputDecoration( - fillColor: AppColors.clrD9, - filled: true, - hintText: 'Select Freight Bill Date ', - hintStyle: TextStyle( - fontSize: 12, - overflow: TextOverflow.ellipsis), - border: OutlineInputBorder( - borderRadius: - BorderRadius.circular(2.0), - borderSide: - BorderSide(color: AppColors.black), - ), - enabledBorder: OutlineInputBorder( - borderRadius: - BorderRadius.circular(2.0), - borderSide: BorderSide( - color: AppColors.clrGrey), - ), - focusedBorder: OutlineInputBorder( - borderRadius: - BorderRadius.circular(2.0), - borderSide: BorderSide( - color: AppColors.clrGrey), - ), - disabledBorder: OutlineInputBorder( - borderRadius: - BorderRadius.circular(2.0), - borderSide: BorderSide( - color: AppColors.clrGrey), - ), - suffixIcon: ctrl.dateCheck.value - ? InkWell( - onTap: () { - ctrl.dateCheck.value = - false; - ctrl.fromController - .clear(); - ctrl.fromSelectedDate = - DateTime.now(); - }, - child: Icon(Icons.close, - size: 1.2.w), - ) - : null, - contentPadding: - const EdgeInsets.symmetric( - horizontal: 12.0, vertical: 0.0), - ), - ), - ), - ], - ), - ), - SizedBox(width: 16), - Expanded( - child: Column( - mainAxisAlignment: MainAxisAlignment.start, - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - TextView( - text: "Freight Bill No.", isRequired: true), - SizedBox(height: 8), - CustomDropdown( - backClr: AppColors.clrD9, - borderClr: AppColors.clrGrey, - items: ctrl.freightBill, - itemLabel: (item) => item, - onSelected: (selected) { - if (selected != null) { - ctrl.selectFreightBillValidate.value = - selected; - ctrl.showTransactionErrorViewFreight - .value = false; - } - }, - hintText: "Select Freight Bill No.", - ), - Obx(() => ctrl - .showTransactionErrorViewFreight.value - ? Text( - 'Required', - style: TextStyle( - color: Colors.red, fontSize: 12), - ) - : Text('')), - ], - ), - ), - ], - ), - // Padding( - // padding: - // const EdgeInsets.only(top: 16.0, left: 0, right: 8), - // child: Row( - // children: [ - // Expanded( - // child: Column( - // mainAxisAlignment: MainAxisAlignment.start, - // crossAxisAlignment: CrossAxisAlignment.start, - // children: [ - // _commonText( - // "Freight Bill Date", - // ), - // SizedBox(height: 8), - // InputField( - // title: "Select Bill Date", - // ), - // ], - // )), - // ], - // ), - // ), - // Expanded( - // //flex: 2, - // child: Column( - // children: [ - // TextView( - // text: "", - // ), - // Padding( - // padding: const EdgeInsets.only(top: 8.0), - // child: Row( - // mainAxisAlignment: MainAxisAlignment.end, - // children: [ - // CommonBtn( - // bkClr: Colors.white, - // text: AppStrings.cancel, - // clickAction: () {}, - // ), - // SizedBox(width: 16), - // CommonBtn( - // text: AppStrings.submit, - // clickAction: () {}, - // ), - // ], - // ), - // ), - // ], - // )) - ], - ), - ) - : SizedBox(), - ), Obx(() { switch (ctrl.selectedState.value) { case 0: