import 'package:dropdown_button2/dropdown_button2.dart'; import 'package:flutter/cupertino.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:intl/intl.dart'; import 'package:provider/provider.dart'; import '../../Models/financeModels/addDirectPaymentResponse.dart'; class Directpaymentrequesitionlist extends StatefulWidget { final String pageTitleName; const Directpaymentrequesitionlist({super.key, required this.pageTitleName}); @override State createState() => _DirectpaymentrequesitionlistState(); } class _DirectpaymentrequesitionlistState extends State { @override void initState() { // TODO: implement initState super.initState(); WidgetsBinding.instance.addPostFrameCallback((timeStamp) { var provider = Provider.of( context, listen: false, ); provider.addDirectPaymentRequestionViewAPI(context); }); } @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) { return WillPopScope( child: Scaffold( 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, "Account"), DropdownButtonHideUnderline( child: Row( children: [ Expanded( child: DropdownButton2( isExpanded: true, hint: Text( 'Select Account Type', style: TextStyle(fontSize: 14), overflow: TextOverflow.ellipsis, ), items: provider.directAccounts .map( (accs) => DropdownMenuItem( value: accs, child: Text( accs.name ?? '', style: const TextStyle( fontSize: 14, ), overflow: TextOverflow.ellipsis, ), ), ) .toList(), value: provider.selectDirectAccounts, onChanged: (DirectAccounts? value) { if (value != null) { if (provider.directAccounts.isNotEmpty) { provider.selectDirectAccounts = value; print( "Selected Complaint Type: ${value.name}, ID: ${value.id}", ); provider.directAccountId = value.id!; provider.directAccountValue = value.name!; print( "hfjkshfg" + provider.directAccountId.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), ), ), ), ], ), ), TextWidget(context, "Payment Account"), DropdownButtonHideUnderline( child: Row( children: [ Expanded( child: DropdownButton2( isExpanded: true, hint: Text( 'Select Account Type', style: TextStyle(fontSize: 14), overflow: TextOverflow.ellipsis, ), items: provider.directPaymentAccounts .map( (accs) => DropdownMenuItem< DirectPaymentAccounts >( value: accs, child: Text( accs.name ?? '', style: const TextStyle( fontSize: 14, ), overflow: TextOverflow.ellipsis, ), ), ) .toList(), value: provider.selectDirectPaymentAccounts, onChanged: (DirectPaymentAccounts? value) { if (value != null) { if (provider .directPaymentAccounts .isNotEmpty) { provider.selectDirectPaymentAccounts = value; print( "Selected Complaint Type: ${value.name}, ID: ${value.id}", ); provider.directPaymentAccountsID = value.id!; provider.directPaymentAccountsValue = value.name!; print( "hfjkshfg" + provider.directPaymentAccountsID .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), ), ), ), ], ), ), textControllerWidget( context, provider.amountController, "Enter Amount", provider.updateAmount, ), ///payment date toBE TextWidget(context, "Enter Date"), Row( crossAxisAlignment: CrossAxisAlignment.center, children: [ Expanded( child: InkResponse( onTap: () async { provider.showDatePickerDialog(context); }, child: Container( padding: EdgeInsets.only(left: 10), height:48, alignment: Alignment.centerLeft, decoration: BoxDecoration( borderRadius: BorderRadius.circular(14), color: AppColors.text_field_color ), child: Text( '${provider.formattedDate ?? 'Select Date'}', style: TextStyle( fontSize: 14, fontFamily: "JakartaMedium", color: AppColors.semi_black, ), ), ), ), ), ], ), 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.directPaymentModes .map( (paymenents) => DropdownMenuItem< DirectPaymentModes >( value: paymenents, child: Text( paymenents.name ?? '', style: const TextStyle( fontSize: 14, ), overflow: TextOverflow.ellipsis, ), ), ) .toList(), value: provider.selectDirectPaymentModes, onChanged: (DirectPaymentModes? value) { if (value != null) { if (provider.directPaymentModes.isNotEmpty) { provider.selectDirectPaymentModes = value; print( "Selected Complaint Type: ${value.name}, ID: ${value.id}", ); provider.directPaymentModesID = value.id!; provider.directPaymentModesValues = value.name!; print( "hfjkshfg" + provider.directPaymentModesID .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), ), ), ), ], ), ), if ([ "Cheque", "RTGS", "IMPS", "NEFT", ].contains(provider.paymentModeValue)) ... [ textControllerWidget( context, provider.bankNameController, "Enter Bank Name", provider.updateBankName, ), textControllerWidget( context, provider.bankBranchController, "Enter Bank Branch", provider.updateBankBranch, ), textControllerWidget( context, provider.bankAccNumberController, "Enter Account Number", provider.updateNumber, ), textControllerWidget( context, provider.bankIfscController, "Enter Bank IFSC", provider.updateIFSC, ), textControllerWidget( context, provider.bankAcHolderController, "Enter Bank Account Holder Name", provider.updateHolder, ), ] else if (provider.paymentModeValue == "UPI") ... [ textControllerWidget( context, provider.amountController, "Enter UPI ID", provider.updateUPI, ), ], textControllerWidget( context, provider.paymentReferenceController, "Enter Payment Reference Number", provider.updateDescription, ), textControllerWidget( context, provider.descController, "Enter Description", provider.updateDescription, ), 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, ), ), ), ), ), ], ), ), ), floatingActionButtonLocation: FloatingActionButtonLocation.centerFloat, bottomNavigationBar: InkResponse( onTap: () { // provider.submitClicked = true; provider.addDirectPaymentRequestionSubmitAPI(context, provider.formattedDate); }, 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); }, ); }, ); } void _showDialog(Widget child) { showCupertinoModalPopup( context: context, builder: (BuildContext context) => Container( height: 216, padding: const EdgeInsets.only(top: 6.0), // The Bottom margin is provided to align the popup above the system // navigation bar. margin: EdgeInsets.only( bottom: MediaQuery.of(context).viewInsets.bottom, ), // Provide a background color for the popup. color: CupertinoColors.systemBackground.resolveFrom(context), // Use a SafeArea widget to avoid system overlaps. child: SafeArea( top: false, child: Column( children: [ Expanded( flex: 1, child: SizedBox( height: 40, child: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ // Add a Cancel button (optional) CupertinoButton( child: Text( 'Cancel', style: TextStyle(fontFamily: "JakartaMedium"), ), onPressed: () { Navigator.pop(context); }, ), // Add a Done button CupertinoButton( child: Text('Done', style: TextStyle(fontFamily: "JakartaMedium")), onPressed: () { Navigator.pop(context); // Dismiss the dialog }, ), ], ), ), ), Expanded(flex: 3, child: child), ], ), ), ), ); } 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"), ), ), ], ), ), ), ); }, ), ); }, ); }, ); } }