import 'package:flutter/material.dart'; import 'package:kmobile/api/services/yojna_service.dart'; import 'package:kmobile/di/injection.dart'; class PMJJBYScreen extends StatefulWidget { final Map? initialData; const PMJJBYScreen({super.key, this.initialData}); @override State createState() => _PMJJBYScreenState(); } class _PMJJBYScreenState extends State { final _formKey = GlobalKey(); // Controllers for all requested fields late final _aadhaarController = TextEditingController(text: widget.initialData?['aadharno']?.toString()); late final _accountNoController = TextEditingController(text: widget.initialData?['accountno']?.toString()); late final _balanceController = TextEditingController(text: widget.initialData?['availablebalance']?.toString()); late final _countryController = TextEditingController(text: widget.initialData?['country']?.toString() ?? 'IN'); late final _dobController = TextEditingController(text: widget.initialData?['customerdob']?.toString()); late final _nameController = TextEditingController(text: widget.initialData?['customername']?.toString()); late final _customerNoController = TextEditingController(text: widget.initialData?['customerno']?.toString()); late final _acctOpeningDateController = TextEditingController(text: widget.initialData?['dateofacctopening']?.toString()); late final _emailController = TextEditingController(text: widget.initialData?['emailid']?.toString()); late final _financialYearController = TextEditingController(text: widget.initialData?['financialyear']?.toString()); late final _genderController = TextEditingController(text: widget.initialData?['gender']?.toString()); late final _ifscController = TextEditingController(text: widget.initialData?['ifsccode']?.toString()); late final _marriedController = TextEditingController(text: widget.initialData?['married']?.toString()); late final _mobileController = TextEditingController(text: widget.initialData?['mobileno']?.toString()); late final _panController = TextEditingController(text: widget.initialData?['pan']?.toString()); late final _pincodeController = TextEditingController(text: widget.initialData?['pincode']?.toString()); late final _policyNumberController = TextEditingController(text: widget.initialData?['policynumber']?.toString()); late final _premiumAmountController = TextEditingController(text: widget.initialData?['premiumamount']?.toString()); late final _stateController = TextEditingController(text: widget.initialData?['state']?.toString()); final _healthStatusController = TextEditingController(); final _collectionChannelController = TextEditingController(); final _nomineeNameController = TextEditingController(); final _nomineeAddressController = TextEditingController(); final _nomineeRelationshipController = TextEditingController(); final _nomineeMinorController = TextEditingController(); final _ruralCategoryController = TextEditingController(); @override void dispose() { _aadhaarController.dispose(); _accountNoController.dispose(); _balanceController.dispose(); _countryController.dispose(); _dobController.dispose(); _nameController.dispose(); _customerNoController.dispose(); _acctOpeningDateController.dispose(); _emailController.dispose(); _financialYearController.dispose(); _genderController.dispose(); _ifscController.dispose(); _marriedController.dispose(); _mobileController.dispose(); _panController.dispose(); _pincodeController.dispose(); _policyNumberController.dispose(); _premiumAmountController.dispose(); _stateController.dispose(); _healthStatusController.dispose(); _collectionChannelController.dispose(); _nomineeNameController.dispose(); _nomineeAddressController.dispose(); _nomineeRelationshipController.dispose(); _nomineeMinorController.dispose(); _ruralCategoryController.dispose(); super.dispose(); } bool _isFetched(String key) { return widget.initialData != null && widget.initialData!.containsKey(key) && widget.initialData![key]?.toString().isNotEmpty == true; } Future _handleRegister() async { // Show loading spinner showDialog( context: context, barrierDismissible: false, builder: (context) => const Center(child: CircularProgressIndicator()), ); try { final response = await getIt().secondvalidationPMJJBY( aadharno: _aadhaarController.text, accountno: _accountNoController.text, availablebalance: _balanceController.text, country: _countryController.text, customerdob: _dobController.text, customername: _nameController.text, customerno: _customerNoController.text, dateofacctopening: _acctOpeningDateController.text, emailid: _emailController.text, financialyear: _financialYearController.text, gender: _genderController.text, ifsccode: _ifscController.text, married: _marriedController.text, mobileno: _mobileController.text, pan: _panController.text, pincode: _pincodeController.text, policynumber: _policyNumberController.text, premiumamount: _premiumAmountController.text, state: _stateController.text, healthstatus: _healthStatusController.text, collectionchannel: _collectionChannelController.text, nomineename: _nomineeNameController.text, nomineeaddress: _nomineeAddressController.text, nomineerelationship: _nomineeRelationshipController.text, nomineeminor: _nomineeMinorController.text, ruralcategory: _ruralCategoryController.text, ); String x = response.toString(); if(x.contains('RECORD ALREADY EXISTS')){ x= "A record already exists for this request. Your submission has been registered previously."; } if (mounted) { // Close loading spinner Navigator.pop(context); // Show response dialog showDialog( context: context, barrierDismissible: false, builder: (context) => AlertDialog( title: const Text('Response'), content: SingleChildScrollView(child: Text(x)), actions: [ TextButton( onPressed: () { Navigator.of(context).popUntil((route) => route.isFirst); }, child: const Text('Close'), ), ], ), ); } } catch (e) { if (mounted) { Navigator.pop(context); // Close loading spinner ScaffoldMessenger.of(context).showSnackBar( SnackBar(content: Text('Error: ${e.toString()}')), ); } } } @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: const Text('PMJJBY Registration'), ), body: SingleChildScrollView( padding: const EdgeInsets.all(16.0), child: Form( key: _formKey, child: Column( crossAxisAlignment: CrossAxisAlignment.stretch, children: [ _buildTextField(_nameController, 'Customer Name', readOnly: _isFetched('customername')), _buildTextField(_customerNoController, 'Customer No', readOnly: _isFetched('customerno')), _buildTextField(_accountNoController, 'Account No', keyboardType: TextInputType.number, readOnly: _isFetched('accountno')), _buildTextField(_balanceController, 'Available Balance', keyboardType: TextInputType.number, readOnly: _isFetched('availablebalance')), _buildTextField(_aadhaarController, 'Aadhaar No', keyboardType: TextInputType.number, readOnly: _isFetched('aadharno')), _buildTextField(_dobController, 'Customer DOB (DD/MM/YYYY)', readOnly: _isFetched('customerdob')), _buildTextField(_genderController, 'Gender', readOnly: _isFetched('gender')), _buildTextField(_marriedController, 'Married (Yes/No)', readOnly: _isFetched('married')), _buildTextField(_mobileController, 'Mobile No', keyboardType: TextInputType.phone, readOnly: _isFetched('mobileno')), _buildTextField(_emailController, 'Email ID', keyboardType: TextInputType.emailAddress, readOnly: _isFetched('emailid')), _buildTextField(_panController, 'PAN', readOnly: _isFetched('pan')), _buildTextField(_ifscController, 'IFSC Code', readOnly: _isFetched('ifsccode')), _buildTextField(_acctOpeningDateController, 'Date of Acct Opening', readOnly: _isFetched('dateofacctopening')), _buildTextField(_pincodeController, 'Pincode', keyboardType: TextInputType.number, readOnly: _isFetched('pincode')), _buildTextField(_stateController, 'State', readOnly: _isFetched('state')), _buildTextField(_countryController, 'Country', readOnly: _isFetched('country')), _buildTextField(_ruralCategoryController, 'Rural Category'), const Divider(height: 32), const Text('Policy Details', style: TextStyle(fontSize: 18, fontWeight: FontWeight.bold)), const SizedBox(height: 16), _buildTextField(_policyNumberController, 'Policy Number', readOnly: _isFetched('policynumber')), _buildTextField(_premiumAmountController, 'Premium Amount', keyboardType: TextInputType.number, readOnly: _isFetched('premiumamount')), _buildTextField(_financialYearController, 'Financial Year', readOnly: _isFetched('financialyear')), _buildTextField(_healthStatusController, 'Health Status'), _buildTextField(_collectionChannelController, 'Collection Channel'), const Divider(height: 32), const Text('Nominee Details', style: TextStyle(fontSize: 18, fontWeight: FontWeight.bold)), const SizedBox(height: 16), _buildTextField(_nomineeNameController, 'Nominee Name'), _buildTextField(_nomineeAddressController, 'Nominee Address'), _buildTextField(_nomineeRelationshipController, 'Nominee Relationship'), _buildTextField(_nomineeMinorController, 'Nominee Minor (Yes/No)'), const SizedBox(height: 24), ElevatedButton( onPressed: _handleRegister, style: ElevatedButton.styleFrom( backgroundColor: Theme.of(context).colorScheme.primary, foregroundColor: Colors.white, padding: const EdgeInsets.symmetric(vertical: 16), shape: RoundedRectangleBorder( borderRadius: BorderRadius.circular(8), ), ), child: const Text( 'Register', style: TextStyle(fontSize: 16, fontWeight: FontWeight.bold), ), ), const SizedBox(height: 32), ], ), ), ), ); } Widget _buildTextField(TextEditingController controller, String label, {TextInputType keyboardType = TextInputType.text, bool readOnly = false}) { return Padding( padding: const EdgeInsets.only(bottom: 16.0), child: TextFormField( controller: controller, readOnly: readOnly, decoration: InputDecoration( labelText: label, border: const OutlineInputBorder(), contentPadding: const EdgeInsets.symmetric(vertical: 16, horizontal: 12), ), keyboardType: keyboardType, ), ); } }