intl_phone_field icon indicating copy to clipboard operation
intl_phone_field copied to clipboard

validation is not working properly

Open Anandh2708 opened this issue 1 year ago • 4 comments

validation not working properly. when i try to call validate funtion without enter any input it doen't call the validator method.

Anandh2708 avatar Dec 30 '23 18:12 Anandh2708

facing same issue

naumanahmed19 avatar Dec 31 '23 20:12 naumanahmed19

facing same issue with this code version intl_phone_field: ^3.2.0 ----- view ------

IntlPhoneField(

             controller: provider.phoneController,
            showCountryFlag: false,
            showDropdownIcon: true,
            pickerDialogStyle: PickerDialogStyle(
              countryNameStyle: AppTheme.instance.textFieldStyle.copyWith(color: Colors.black),
              countryCodeStyle: AppTheme.instance.textFieldStyle.copyWith(color: Colors.black),
            ),
            onCountryChanged: (country) => provider.setCountry(country),
            style: AppTheme.instance.textFieldStyle.copyWith(color: Colors.black),
            textInputAction: TextInputAction.next,
            dropdownTextStyle: AppTheme.instance.textFieldStyle.copyWith(color: Colors.black),
            keyboardType: TextInputType.number,
            decoration: _decoration,
            initialCountryCode: controller.initialCountryCode,
            onChanged: (phone) {
              // provider.setCountry(phone);
              debugPrint(phone.completeNumber);
            },
          )
          --------
          on button click
          
          
  if (phoneController.text.isNotEmpty && !(formKey.currentState?.validate() ?? false)) {
    AppUtils.showErrorSnackBar(phoneValidation);
    return;
  }
  
  selected country AF
  +93  9685111112
  
  10 /9 
  sometime validate sometime not 
  
          

vishalvishvakarma1111 avatar Jan 02 '24 07:01 vishalvishvakarma1111

@Anandh2708 @naumanahmed19 I am also facing same issue. i manage to display error message somehow but i am not able to change border to red Row( children: [ Expanded( child: Column( crossAxisAlignment:CrossAxisAlignment.start, children: [ IntlPhoneField( controller: _mobileNumberController, decoration: InputDecoration( alignLabelWithHint: true, contentPadding: EdgeInsets.symmetric( vertical: 2.h, horizontal: 2.w), suffixIcon: displayMobileNumberNotRegisteredLogo != null && displayMobileNumberNotRegisteredLogo != false ? const Icon(Icons.verified, color: Colors.green) : displayMobileNumberRegisteredLogo == true ? const Icon(Icons.close_rounded,color: Colors.red) : const Icon(Icons.verified, color: Colors.transparent), labelText: "Mobile number*", filled: true, fillColor: ColorConstants.white, border: OutlineInputBorder( borderSide: const BorderSide(color: ColorConstants.textFormBorder), borderRadius: BorderRadius.circular(1.w), ), errorBorder: OutlineInputBorder( borderSide: const BorderSide(color: ColorConstants.errorInputBorderColor), borderRadius: BorderRadius.circular(1.w), ), focusedErrorBorder: OutlineInputBorder( borderSide: const BorderSide( color: ColorConstants.errorInputBorderColor), borderRadius:BorderRadius.circular(1.w), ), errorStyle: (screenWidth > 600)? TabErrorInputTextStyleforLogin() : ErrorInputTextStyleforLogin(), counter: const Offstage(), labelStyle: (screenWidth > 600) ? TabSignUpLabelStyle() : SignUpLabelStyle(), ), validator: (value) { if (_mobileNumberController.text.isEmpty) { _scrollToError(); return "Enter mobile number"; } return null; }, inputFormatters: [ FilteringTextInputFormatter.digitsOnly], autovalidateMode: _mobileNumberController.text != "" ? AutovalidateMode.always: AutovalidateMode.disabled, onChanged: (phone) { if (phone.number != '') { validationMessage = ""; setState(() {}); return; } }, dropdownIconPosition: IconPosition.trailing, keyboardType: TextInputType.number, flagsButtonPadding: EdgeInsets.symmetric(vertical: 0.8.h), flagsButtonMargin: EdgeInsets.symmetric(horizontal: 5.w), initialCountryCode: "IN", onCountryChanged: (phone) { selectedCountryCode = "+${phone.dialCode}"; setState(() {}); }, style: (screenWidth > 600) ? TabSignUpTextFieldStyle() : SignUpTextFieldStyle(), ), if (validationMessage != "") Padding( padding: EdgeInsets.only(top: 2.0, left: 15.0, bottom: 10.0), child: Text(validationMessage, style: ErrorInputTextStyleforLogin())) ], ), ) ], ), and my form submission button onButtonPressed: () async { enteredMobileNumber = "$selectedCountryCode ${_mobileNumberController.text.trim()}"; if (_mobileNumberController.text.isEmpty) { setState(() { validationMessage = "Enter mobile number"; }); } else { validationMessage = ""; } you resolve this issue ?

mrunal-atreya avatar Feb 07 '24 17:02 mrunal-atreya

Was facing the same issue, I've posted a quick fix in #374

hani-hj1908619 avatar Mar 30 '24 00:03 hani-hj1908619