11import 'package:flutter/material.dart' ;
22import 'package:intl_mobile_field/countries.dart' ;
33import 'package:intl_mobile_field/intl_mobile_field.dart' ;
4+ import 'package:intl_mobile_field/mobile_number.dart' ;
45import 'package:threebotlogin/services/phone_service.dart' ;
56
67import 'custom_dialog.dart' ;
@@ -15,10 +16,11 @@ Future<void> addPhoneNumberDialog(context,
1516 context: context,
1617 barrierDismissible: false ,
1718 builder: (BuildContext context) => PhoneAlertDialog (
18- defaultCountryCode: countryCode,
19- newPhone: newPhone,
20- oldPhone: oldPhone,
21- onVerify: onVerify,),
19+ defaultCountryCode: countryCode,
20+ newPhone: newPhone,
21+ oldPhone: oldPhone,
22+ onVerify: onVerify,
23+ ),
2224 );
2325}
2426
@@ -62,13 +64,19 @@ class PhoneAlertDialog extends StatefulWidget {
6264}
6365
6466class PhoneAlertDialogState extends State <PhoneAlertDialog > {
65- bool valid = false ;
6667 String verificationPhoneNumber = '' ;
6768 Country _country = countries.firstWhere ((element) => element.code == 'US' );
6869
70+ bool get _isValid => verificationPhoneNumber.isNotEmpty;
71+
72+ bool _isValidPhone (MobileNumber ? phone) =>
73+ phone != null &&
74+ phone.completeNumber != widget.oldPhone &&
75+ phone.number.length >= _country.minLength &&
76+ phone.number.length <= _country.maxLength;
77+
6978 @override
7079 void initState () {
71- valid = false ;
7280 verificationPhoneNumber = '' ;
7381 _country = countries
7482 .firstWhere ((element) => element.code == widget.defaultCountryCode);
@@ -112,25 +120,24 @@ class PhoneAlertDialogState extends State<PhoneAlertDialog> {
112120 .bodyMedium!
113121 .copyWith (color: Theme .of (context).colorScheme.onSurface),
114122 validator: (phone) {
115- final isValid = phone != null &&
116- phone.completeNumber != widget.oldPhone &&
117- phone.number.length >= _country.minLength &&
118- phone.number.length <= _country.maxLength;
119-
120- setState (() => valid = isValid);
121- verificationPhoneNumber = isValid ? phone.completeNumber : '' ;
122-
123- return isValid
124- ? null
125- : (phone! .completeNumber == widget.oldPhone
126- ? 'Please enter a different number'
127- : 'Invalid Mobile Number' );
123+ if (phone? .completeNumber == widget.oldPhone) {
124+ return 'Please enter a different number' ;
125+ }
126+ return _isValidPhone (phone) ? null : 'Invalid Mobile Number' ;
127+ },
128+ onChanged: (phone) {
129+ final newNumber =
130+ _isValidPhone (phone) ? phone.completeNumber : '' ;
131+ if (newNumber != verificationPhoneNumber) {
132+ setState (() => verificationPhoneNumber = newNumber);
133+ }
128134 },
129135 disableLengthCheck: true ,
130136 onCountryChanged: (country) {
131- if (_country != country) valid = false ;
132- _country = country;
133- setState (() {});
137+ setState (() {
138+ _country = country;
139+ verificationPhoneNumber = '' ;
140+ });
134141 },
135142 ),
136143 ),
@@ -141,10 +148,10 @@ class PhoneAlertDialogState extends State<PhoneAlertDialog> {
141148 child: const Text ('Cancel' ),
142149 onPressed: () => Navigator .pop (context),
143150 ),
144- if (valid )
151+ if (_isValid )
145152 TextButton (
146- onPressed: () async {
147- await widget.onVerify (valid , verificationPhoneNumber);
153+ onPressed: () async {
154+ await widget.onVerify (_isValid , verificationPhoneNumber);
148155 Navigator .pop (context);
149156 },
150157 child: Text (widget.newPhone ? 'Add' : 'Update' ),
0 commit comments