From ba1ef0ed24b39241162c4d372a50281624ea33ed Mon Sep 17 00:00:00 2001 From: Nilanjan Chakrabarti Date: Tue, 16 Sep 2025 12:59:31 +0530 Subject: [PATCH] IFSC Field Testing #2 --- .../screens/add_beneficiary_screen.dart | 23 ++++++++++++++++--- .../quick_pay_outside_bank_screen.dart | 11 ++++++--- 2 files changed, 28 insertions(+), 6 deletions(-) diff --git a/lib/features/beneficiaries/screens/add_beneficiary_screen.dart b/lib/features/beneficiaries/screens/add_beneficiary_screen.dart index ac37ff8..1f1385b 100644 --- a/lib/features/beneficiaries/screens/add_beneficiary_screen.dart +++ b/lib/features/beneficiaries/screens/add_beneficiary_screen.dart @@ -34,6 +34,7 @@ final _ifscFieldKey = GlobalKey(); final TextEditingController branchNameController = TextEditingController(); final TextEditingController ifscController = TextEditingController(); final TextEditingController phoneController = TextEditingController(); + final _ifscFocusNode = FocusNode(); final service = getIt(); bool _isValidating = false; @@ -45,6 +46,11 @@ final _ifscFieldKey = GlobalKey(); @override void initState() { super.initState(); + _ifscFocusNode.addListener(() { + if (!_ifscFocusNode.hasFocus && ifscController.text.trim().length == 11) { + _validateIFSC(); + } +}); WidgetsBinding.instance.addPostFrameCallback((_) { setState(() { accountType = 'Savings'; @@ -52,6 +58,19 @@ final _ifscFieldKey = GlobalKey(); }); } + @override + void dispose() { + accountNumberController.dispose(); + confirmAccountNumberController.dispose(); + nameController.dispose(); + bankNameController.dispose(); + branchNameController.dispose(); + ifscController.dispose(); + phoneController.dispose(); + _ifscFocusNode.dispose(); + super.dispose(); + } + void _validateIFSC() async { var beneficiaryService = getIt(); final ifsc = ifscController.text.trim().toUpperCase(); @@ -296,6 +315,7 @@ final _ifscFieldKey = GlobalKey(); ), const SizedBox(height: 24), TextFormField( + focusNode: _ifscFocusNode, key: _ifscFieldKey, controller: ifscController, maxLength: 11, @@ -309,9 +329,6 @@ final _ifscFieldKey = GlobalKey(); ), textCapitalization: TextCapitalization.characters, textInputAction: TextInputAction.next, - onFieldSubmitted: (_) { - _validateIFSC(); - }, onChanged: (value) { setState(() { final trimmed = value.trim().toUpperCase(); diff --git a/lib/features/quick_pay/screens/quick_pay_outside_bank_screen.dart b/lib/features/quick_pay/screens/quick_pay_outside_bank_screen.dart index 8d0dbbb..ec827ae 100644 --- a/lib/features/quick_pay/screens/quick_pay_outside_bank_screen.dart +++ b/lib/features/quick_pay/screens/quick_pay_outside_bank_screen.dart @@ -39,6 +39,7 @@ class _QuickPayOutsideBankScreen extends State { final phoneController = TextEditingController(); final amountController = TextEditingController(); final remarksController = TextEditingController(); + final _ifscFocusNode = FocusNode(); final service = getIt(); late String accountType; @@ -49,6 +50,11 @@ class _QuickPayOutsideBankScreen extends State { @override void initState() { super.initState(); + _ifscFocusNode.addListener(() { + if (!_ifscFocusNode.hasFocus && ifscController.text.trim().length == 11) { + _validateIFSC(); + } +}); WidgetsBinding.instance.addPostFrameCallback((_) { setState(() { accountType = 'Savings'; @@ -139,6 +145,7 @@ class _QuickPayOutsideBankScreen extends State { amountController.dispose(); remarksController.dispose(); super.dispose(); + _ifscFocusNode.dispose(); } void _onProceedToPay() { @@ -479,6 +486,7 @@ class _QuickPayOutsideBankScreen extends State { children: [ Expanded( child: TextFormField( + focusNode: _ifscFocusNode, maxLength: 11, inputFormatters: [ LengthLimitingTextInputFormatter(11), @@ -501,9 +509,6 @@ class _QuickPayOutsideBankScreen extends State { ), controller: ifscController, textInputAction: TextInputAction.next, - onFieldSubmitted: (_) { - _validateIFSC(); - }, onChanged: (value) { setState(() { final trimmed = value.trim().toUpperCase();