import 'package:dropdown_button2/dropdown_button2.dart'; import 'package:flutter/material.dart'; import 'package:generp/Notifiers/financeProvider/RequestionListProvider.dart'; import 'package:generp/Utils/app_colors.dart'; import 'package:generp/Utils/commonWidgets.dart'; import 'package:provider/provider.dart'; import '../../Models/financeModels/addPaymentRequestionResponse.dart'; class Submitpaymentrequestionlistsbymode extends StatefulWidget { final String mode; final String pageTitleName; const Submitpaymentrequestionlistsbymode({super.key, required this.mode,required this.pageTitleName}); @override State createState() => _SubmitpaymentrequestionlistsbymodeState(); } class _SubmitpaymentrequestionlistsbymodeState extends State { @override void initState() { // TODO: implement initState super.initState(); WidgetsBinding.instance.addPostFrameCallback((timeStamp) { var provider = Provider.of(context, listen: false); provider.addPaymentRequestionViewAPI(context, widget.mode); }); } @override void dispose() { super.dispose(); } Future _onBackPressed(BuildContext context) async { Navigator.pop(context, true); return true; } @override Widget build(BuildContext context) { return Consumer( builder: (context, provider, child) { WidgetsBinding.instance.addPostFrameCallback((timeStamp) { if (widget.mode == "self" && provider.accounts.length == 1) { provider.selectedAccount = provider.accounts.first; provider.accountId = provider.accounts.first.id!; } }); return WillPopScope( child: Scaffold( resizeToAvoidBottomInset: true, backgroundColor: AppColors.white, appBar: appbar(context, "${widget.pageTitleName}"), body: Container( padding: EdgeInsets.symmetric(horizontal: 10), decoration: BoxDecoration( color: Colors.white, borderRadius: BorderRadius.circular(20), ), child: SingleChildScrollView( child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ TextWidget(context, "Select Account"), DropdownButtonHideUnderline( child: Row( children: [ Expanded( child: DropdownButton2( isExpanded: true, hint: Text( 'Select Account Type', style: TextStyle(fontSize: 14), overflow: TextOverflow.ellipsis, ), items: provider.accounts .map( (accs) => DropdownMenuItem( value: accs, child: Text( accs.name ?? '', style: const TextStyle( fontSize: 14, ), overflow: TextOverflow.ellipsis, ), ), ) .toList(), value: provider.selectedAccount, onChanged: (widget.mode == "self" && provider.accounts.length == 1) ? null : (Accounts? value) { if (value != null) { if (provider.accounts.isNotEmpty) { provider.selectedAccount = value; print( "Selected Complaint Type: ${value.name}, ID: ${value.id}", ); provider.accountId = value.id!; print( "hfjkshfg" + provider.accountId.toString(), ); } } }, buttonStyleData: ButtonStyleData( height: 50, width: 160, padding: const EdgeInsets.only( left: 14, right: 14, ), decoration: BoxDecoration( borderRadius: BorderRadius.circular(14), color: AppColors.text_field_color, ), ), iconStyleData: const IconStyleData( icon: Icon(Icons.keyboard_arrow_down), iconSize: 12, iconEnabledColor: Color(0xFF2D2D2D), iconDisabledColor: Colors.grey, ), dropdownStyleData: DropdownStyleData( maxHeight: 200, decoration: BoxDecoration( borderRadius: BorderRadius.circular(14), color: AppColors.text_field_color, ), scrollbarTheme: ScrollbarThemeData( radius: const Radius.circular(15), thickness: MaterialStateProperty.all( 6, ), thumbVisibility: MaterialStateProperty.all(true), ), ), menuItemStyleData: const MenuItemStyleData( height: 40, padding: EdgeInsets.only(left: 14, right: 14), ), ), ), ], ), ), ErrorWidget(context, provider.selectAccountError), if (["self", "admin"].contains(widget.mode)) ...[ TextWidget(context, "Select Requisition Type"), DropdownButtonHideUnderline( child: Row( children: [ Expanded( child: DropdownButton2( isExpanded: true, hint: Text( 'Select Request Type', style: TextStyle(fontSize: 14), overflow: TextOverflow.ellipsis, ), items: provider.requestingPurposes .map( (accs) => DropdownMenuItem( value: accs, child: Text( accs ?? '', style: const TextStyle( fontSize: 14, ), overflow: TextOverflow.ellipsis, ), ), ) .toList(), value: provider.selectReqPurpose, onChanged: (String? value) { if (value != null) { provider.selectReqPurpose = value; print("Selected Complaint Type: ${value},"); print( "hfjkshfg" + provider.selectReqPurpose.toString(), ); } }, buttonStyleData: ButtonStyleData( height: 50, width: 160, padding: const EdgeInsets.only( left: 14, right: 14, ), decoration: BoxDecoration( borderRadius: BorderRadius.circular(14), color: AppColors.text_field_color, ), ), iconStyleData: const IconStyleData( icon: Icon(Icons.keyboard_arrow_down), iconSize: 12, iconEnabledColor: Color(0xFF2D2D2D), iconDisabledColor: Colors.grey, ), dropdownStyleData: DropdownStyleData( maxHeight: 200, decoration: BoxDecoration( borderRadius: BorderRadius.circular(14), color: AppColors.text_field_color, ), scrollbarTheme: ScrollbarThemeData( radius: const Radius.circular(15), thickness: MaterialStateProperty.all(6), thumbVisibility: MaterialStateProperty.all(true), ), ), menuItemStyleData: const MenuItemStyleData( height: 40, padding: EdgeInsets.only(left: 14, right: 14), ), ), ), ], ), ), ] else ...[ textControllerWidget( context, provider.reqPurposeController, "Enter Request Purpose", provider.updateReqPupose, ), ], ErrorWidget(context, provider.reqPurposeError), textControllerWidget( context, provider.descController, "Enter Description", provider.updateDescription, ), ErrorWidget(context, provider.descriptionError), textControllerWidget( context, provider.amountController, "Enter Amount", provider.updateAmount, ), ErrorWidget(context, provider.amountError), TextWidget(context, "Select Payment Mode"), DropdownButtonHideUnderline( child: Row( children: [ Expanded( child: DropdownButton2( isExpanded: true, hint: Text( 'Select Payment mode', style: TextStyle(fontSize: 14), overflow: TextOverflow.ellipsis, ), items: provider.paymentModes .map( (paymenents) => DropdownMenuItem( value: paymenents, child: Text( paymenents.name ?? '', style: const TextStyle( fontSize: 14, ), overflow: TextOverflow.ellipsis, ), ), ) .toList(), value: provider.selectedPayment, onChanged: (PaymentModes? value) { if (value != null) { if (provider.paymentModes.isNotEmpty) { provider.selectedPayment = value; print( "Selected Complaint Type: ${value.name}, ID: ${value.id}", ); provider.paymentModeId = value.id!; provider.paymentModeValue = value.name!; print( "hfjkshfg" + provider.paymentModeId.toString(), ); } } }, buttonStyleData: ButtonStyleData( height: 50, width: 160, padding: const EdgeInsets.only( left: 14, right: 14, ), decoration: BoxDecoration( borderRadius: BorderRadius.circular(14), color: AppColors.text_field_color, ), ), iconStyleData: const IconStyleData( icon: Icon(Icons.keyboard_arrow_down), iconSize: 12, iconEnabledColor: Color(0xFF2D2D2D), iconDisabledColor: Colors.grey, ), dropdownStyleData: DropdownStyleData( maxHeight: 200, decoration: BoxDecoration( borderRadius: BorderRadius.circular(14), color: AppColors.text_field_color, ), scrollbarTheme: ScrollbarThemeData( radius: const Radius.circular(15), thickness: MaterialStateProperty.all( 6, ), thumbVisibility: MaterialStateProperty.all(true), ), ), menuItemStyleData: const MenuItemStyleData( height: 40, padding: EdgeInsets.only(left: 14, right: 14), ), ), ), ], ), ), ErrorWidget(context, provider.selectPaymentError), InkResponse( onTap: () { _showAttachmentSheet(context); }, child: Container( margin: EdgeInsets.symmetric(vertical: 10), height: 45, width: MediaQuery.of(context).size.width, decoration: BoxDecoration( color: Color(0xFFE6F6FF), borderRadius: BorderRadius.circular(12), border: Border.all( color: AppColors.app_blue, width: 0.5, ), ), child: Center( child: Text( "File Attachment", style: TextStyle( fontFamily: "JakartaMedium", color: AppColors.app_blue, ), ), ), ), ), ErrorWidget(context, provider.FileError), if ([ "Cheque", "RTGS", "IMPS", "NEFT", ].contains(provider.paymentModeValue)) ...[ textControllerWidget( context, provider.bankNameController, "Enter Bank Name", provider.updateBankName, ), ErrorWidget(context, provider.bankNameError), textControllerWidget( context, provider.bankBranchController, "Enter Bank Branch", provider.updateBankBranch, ), ErrorWidget(context, provider.bankBranchError), textControllerWidget( context, provider.bankAccNumberController, "Enter Account Number", provider.updateNumber, ), ErrorWidget(context, provider.bankNumberError), textControllerWidget( context, provider.bankIfscController, "Enter Bank IFSC", provider.updateIFSC, ), ErrorWidget(context, provider.bankIFSCError), textControllerWidget( context, provider.bankAcHolderController, "Enter Bank Account Holder Name", provider.updateHolder, ), ErrorWidget(context, provider.bankHolderError), ] else if (provider.paymentModeValue == "UPI") ...[ textControllerWidget( context, provider.amountController, "Enter UPI ID", provider.updateUPI, ), ErrorWidget(context, provider.UPIError), ], ], ), ), ), floatingActionButtonLocation: FloatingActionButtonLocation.centerFloat, bottomNavigationBar: InkResponse( onTap: () { // provider.submitClicked = true; provider.addPaymentRequestionSubmitAPI( context, widget.mode, ); }, child: Container( height: 45, alignment: Alignment.center, margin: EdgeInsets.symmetric(horizontal: 10), padding: EdgeInsets.symmetric(horizontal: 10, vertical: 5), decoration: BoxDecoration( color:AppColors.app_blue, borderRadius: BorderRadius.circular(15), ), child: Text( "Submit", style: TextStyle( fontSize: 15, fontFamily: "JakartaMedium", color: Colors.white, ), ), ), ), ), onWillPop: () { provider.resetForm(); return onBackPressed(context); }, ); }, ); } Widget TextWidget(context, text) { return Padding( padding: const EdgeInsets.only(bottom: 5.0, top: 8.0), child: Text(text), ); } Widget ErrorWidget(context, text) { if (text != null) return Text(text!, style: TextStyle(color: Colors.red, fontSize: 12)); else return SizedBox(height: 10); } Widget textControllerWidget( context, controller, hintText, Function(String)? onChanged, ) { return Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Padding( padding: const EdgeInsets.only(bottom: 5.0, top: 8.0), child: Text(hintText), ), Container( height: hintText == "Enter Description" ? 150 : 50, alignment: Alignment.center, decoration: BoxDecoration( color: AppColors.text_field_color, borderRadius: BorderRadius.circular(14), ), child: Padding( padding: const EdgeInsets.fromLTRB(10.0, 0.0, 10, 0), child: TextFormField( controller: controller, keyboardType: TextInputType.text, maxLines: hintText == "Enter Description" ? 60 : 1, onChanged: onChanged, decoration: InputDecoration( hintText: hintText, hintStyle: TextStyle( fontWeight: FontWeight.w400, color: Color(0xFFB4BEC0), fontSize: 14, ), enabledBorder: InputBorder.none, focusedBorder: InputBorder.none, ), ), ), ), ], ); } Future _showAttachmentSheet(BuildContext context) { return showModalBottomSheet( useSafeArea: true, isDismissible: true, isScrollControlled: true, showDragHandle: true, backgroundColor: Colors.white, enableDrag: true, context: context, builder: (context) { return StatefulBuilder( builder: (context, setState) { return SafeArea( child: Consumer( builder: (context, provider, child) { return Padding( padding: EdgeInsets.only( bottom: MediaQuery.of( context, ).viewInsets.bottom, // This handles keyboard ), child: Container( margin: EdgeInsets.only( bottom: 15, left: 15, right: 15, top: 10, ), child: SingleChildScrollView( child: Column( crossAxisAlignment: CrossAxisAlignment.start, mainAxisSize: MainAxisSize.min, children: [ Align( alignment: Alignment.center, child: Text( "Select Source", style: TextStyle( color: AppColors.app_blue, fontFamily: "JakrtaMedium", fontSize: 16, ), ), ), SizedBox(height: 15), InkWell( onTap: () { Navigator.of(context).pop(false); provider.imgFromGallery(context); }, child: Container( height: 35, child: Text("Select photo from gallery"), ), ), SizedBox(height: 10), InkWell( onTap: () { Navigator.of(context).pop(false); provider.imgFromCamera(context); }, child: Container( height: 35, child: Text("Capture photo from camera"), ), ), ], ), ), ), ); }, ), ); }, ); }, ); } }