Intl Phone Number Input

A simple and customizable flutter package for inputting phone number in intl / international format uses Google's libphonenumber

CustomDecorationCustomBorderDefault
Screenshot_1587652933Screenshot_1587652933Screenshot_1587652933
Web

What's new

  • Added support for Flutter Web :fire: :fire: :fire: :rocket: :rocket: :rocket: .
  • Added textAlign, textAlignVertical.
  • Fixed French translation of Egypt.
  • Added option to make selector button a prefix icon in SelectorConfig.
  • Added cursorColor option.
  • Added scrollPadding option.
  • Added new language translations for Serbia, with two scripts.
  • Updated onSaved into ValueChange<PhoneNumber>. now onSaved returns a PhoneNumber object.
  • Added keyboardType option and improvements on iOS keyboard, see #147, #148 for more details.
  • Added locale zh-TW.
  • Added support of nb and nn locale.
  • Fixed issue with AsYouType formatter injecting country dial code on every input for phone numbers with North American Numbering Plan.
  • Fixed issue with Selector Button onTap when enable is false.
  • Breaking Change for v0.7.0, SelectorConfig.backgroundColor would be removed and replaced with Theme.of(context).canvasColor.
  • Added spaceBetweenSelectorAndTextField for padding between selector button and text field.
  • Fixed Bug with cursor position on typing, see #130 for illustration and more information.
  • Fixed Bug with selector button country restoring to initialValue after updating/changing value, see #155 for more information.
  • Tap outside selectorType PhoneInputSelectorType.BOTTOM_SHEET now dismisses the dialog.

Features

  • Web support.
  • Support for RTL languages
  • Selector mode dropdown, bottom sheet and dialog
  • As You Type Formatter: formats inputs to its selected international format
  • Get Region Info with PhoneNumber.getRegionInfoFromPhoneNumber(String phoneNumber, String isoCode);
  • Format PhoneNumber with PhoneNumber.getParsableNumber(String phoneNumber, String isoCode) or PhoneNumber Reference.parseNumber()
  • Custom list of countries e.g. 'NG', 'GH', 'BJ' 'TG', 'CI'
    String phoneNumber =  '+234 500 500 5005';
    PhoneNumber number = await PhoneNumber.getRegionInfoFromPhoneNumber(phoneNumber);
    String parsableNumber = number.parseNumber();
    `controller reference`.text = parsableNumber

Web Support

In your app directory, edit web/index.html to add the following


<!DOCTYPE html>
<html>
    <head>
        ...
    </head>
    <body>
    
        ...

        <script src="packages/libphonenumber_plugin/js/libphonenumber.js"></script>
        <script src="packages/libphonenumber_plugin/js/stringbuffer.js"></script>

        ...

        <script src="main.dart.js" type="application/javascript"></script>
    </body>
</html>

Or checkout /example folder from Github.

Note

    PhoneNumber.getRegionInfoFromPhoneNumber(String phoneNumber, [String isoCode])

Could throw an Exception if the phoneNumber isn't recognised its a good pattern to pass the country's isoCode or have '+' at the beginning of the string

isoCode could be null if PhoneNumber is not recognised

Usage

Constructors

s/nConstructor
1InternationalPhoneNumberInput

Available Parameters

InternationalPhoneNumberInput({
    Key key,
      this.selectorConfig = const SelectorConfig(),
      @required this.onInputChanged,
      this.onInputValidated,
      this.onSubmit,
      this.onFieldSubmitted,
      this.validator,
      this.onSaved,
      this.textFieldController,
      this.keyboardAction,
      this.keyboardType = TextInputType.phone,
      this.initialValue,
      this.hintText = 'Phone number',
      this.errorMessage = 'Invalid phone number',
      this.selectorButtonOnErrorPadding = 24,
      this.spaceBetweenSelectorAndTextField = 12,
      this.maxLength = 15,
      this.isEnabled = true,
      this.formatInput = true,
      this.autoFocus = false,
      this.autoFocusSearch = false,
      this.autoValidateMode = AutovalidateMode.disabled,
      this.ignoreBlank = false,
      this.countrySelectorScrollControlled = true,
      this.locale,
      this.textStyle,
      this.selectorTextStyle,
      this.inputBorder,
      this.inputDecoration,
      this.searchBoxDecoration,
      this.textAlign = TextAlign.start,
      this.textAlignVertical = TextAlignVertical.center,
      this.scrollPadding = const EdgeInsets.all(20.0),
      this.focusNode,
      this.cursorColor,
      this.autofillHints,
      this.countries
    });
SelectorConfig({
    this.selectorType = PhoneInputSelectorType.DROPDOWN,
    this.showFlags = true,
    this.useEmoji = false,
    this.backgroundColor,
    this.countryComparator,
    this.setSelectorButtonAsPrefixIcon = false,
});
ParameterDatatypeInitial Value
onInputChangedfunction(PhoneNumber)null
onSavedfunction(PhoneNumber)null
onInputValidatedfunction(bool)null
focusNodeFocusNodenull
textFieldControllerTextEditingControllerTextEditingController()
onSubmitFunction()null
keyboardActionTextInputActionnull
keyboardTypeTextInputTypeTextInputType.phone
countriesListnull
textStyleTextStylenull
selectorTextStyleTextStylenull
inputBorderInputBordernull
inputDecorationInputDecorationnull
initialValuePhoneNumbernull
hintTextStringPhone Number
selectorButtonOnErrorPaddingdouble24
spaceBetweenSelectorAndTextFielddouble12
maxLengthinteger15
isEnabledbooleantrue
autoFocusbooleanfalse
autoValidateModeAutoValidateModeAutoValidateMode.disabled
formatInputbooleantrue
errorMessageStringInvalid phone number
selectorConfigSelectorConfigSelectorConfig()
ignoreBlankbooleanfalse
localeStringnull
searchBoxDecorationInputDecorationnull
textAlignTextAlignTextAlign.start
textAlignVerticalTextAlignVerticalTextAlignVertical.center
scrollPaddingEdgeInsetsEdgeInsets.all(20.0)
countrySelectorScrollControlledbooleantrue
cursorColorString \null
autofillHintsIterablenull

Selector Types

DROPDOWNBOTTOMSHEETDIALOG
Screenshot_1587652933Screenshot_1587652933Screenshot_1587652933

Testing

Widget Key parameters and Helper classes are now available for integration testing check out this example 🎯 Integration Testing Example

Contributions

If you encounter any problem or the library is missing a feature feel free to open an issue. Feel free to fork, improve the package and make pull request.

Contributors

Made with contributors-img.

Dependencies

Credits

A special thanks to niinyarko

FAQ

  • For discussions and frequent question and concerns, check here

Libraries

intl_phone_number_input
intl_phone_number_input_test