diff --git a/.all-contributorsrc b/.all-contributorsrc index 243e0234..402ebb1c 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -86,6 +86,24 @@ "contributions": [ "code" ] + }, + { + "login": "hanyi00i", + "name": "Ooi Han Yi", + "avatar_url": "https://avatars.githubusercontent.com/u/92980326?v=4", + "profile": "http://beacons.ai/hanyi00i", + "contributions": [ + "code" + ] + }, + { + "login": "jimmyff", + "name": "Jimmy Forrester-Fellowes", + "avatar_url": "https://avatars.githubusercontent.com/u/298850?v=4", + "profile": "https://www.jimmyff.co.uk", + "contributions": [ + "code" + ] } ], "contributorsPerLine": 7, diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 00000000..68c3af05 --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,25 @@ +name: CI + +on: + pull_request: + branches: '*' + push: + branches: [master] + +jobs: + ci: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - uses: subosito/flutter-action@v2 + with: + channel: 'stable' + - name: Install dependencies + run: flutter pub get + - name: Format code + run: dart format --line-length 120 --set-exit-if-changed . + - name: Analyze code + run: flutter analyze + # Skip tests for now + # - name: Run tests + # run: flutter test diff --git a/.github/workflows/stale.yml b/.github/workflows/stale.yml new file mode 100644 index 00000000..6e7f6dea --- /dev/null +++ b/.github/workflows/stale.yml @@ -0,0 +1,18 @@ +name: Close stale issues and PRs + +on: + workflow_dispatch: + schedule: + - cron: '30 1 * * *' # Everyday at 01:30 + +jobs: + stale: + runs-on: ubuntu-latest + steps: + - uses: actions/stale@v8 + with: + stale-issue-message: 'This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs within the next 5 days. If you believe this issue is still relevant, please comment to keep it open. Thank you for your contributions.' + stale-pr-message: 'This PR has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs within the next 30 days. If you believe this PR is still relevant, please comment to keep it open. Thank you for your contributions.' + days-before-stale: 30 + days-before-issue-close: 5 + days-before-pr-close: 30 \ No newline at end of file diff --git a/README.md b/README.md index 36bfbccd..38f6eb3a 100644 --- a/README.md +++ b/README.md @@ -1,9 +1,8 @@ # International Phone Field Package - -[![All Contributors](https://img.shields.io/badge/all_contributors-9-orange.svg?style=flat-square)](#contributors-) - [![pub package](https://img.shields.io/pub/v/intl_phone_field.svg)](https://pub.dev/packages/intl_phone_field) +[![CI](https://github.com/vanshg395/intl_phone_field/actions/workflows/ci.yml/badge.svg?branch=master)](https://github.com/vanshg395/intl_phone_field/actions/workflows/ci.yml) +[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT) A customised Flutter TextFormField to input international phone number along with country code. @@ -27,7 +26,17 @@ Or, add the following to your `pubspec.yaml` file: ```yaml dependencies: - intl_phone_field: ^3.1.0 + intl_phone_field: ^ +``` + +Sometimes you may want to use the latest version of the package, instead of a published version. To do that, use the `git` syntax: + +```yaml +dependencies: + intl_phone_field: + git: + url: git://github.com/vanshg395/intl_phone_field.git + ref: master ``` ## How to Use @@ -66,10 +75,12 @@ Comment on Issue or Pull Request, asking @all-contributors to add a contributor: **\**: See the [Emoji Key (Contribution Types Reference)](https://allcontributors.org/docs/en/emoji-key) for a list of valid contribution types. ## Maintainers + - [Vansh Goel](https://github.com/vanshg395/) - [Alex N'Guessan](https://github.com/marcaureln/) ## Contributors + @@ -87,6 +98,8 @@ Comment on Issue or Pull Request, asking @all-contributors to add a contributor: hans.huang
hans.huang

πŸ’» πŸ“– Gregor Weber
Gregor Weber

πŸ’» + Ooi Han Yi
Ooi Han Yi

πŸ’» + Jimmy Forrester-Fellowes
Jimmy Forrester-Fellowes

πŸ’» @@ -98,4 +111,4 @@ Comment on Issue or Pull Request, asking @all-contributors to add a contributor: ## LICENSE -[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT) +This project is licensed under the MIT license. See [LICENSE](LICENSE) for more information. diff --git a/example/pubspec.lock b/example/pubspec.lock index cd0f6dd9..aa66e30c 100644 --- a/example/pubspec.lock +++ b/example/pubspec.lock @@ -5,10 +5,10 @@ packages: dependency: transitive description: name: async - sha256: bfe67ef28df125b7dddcea62755991f807aa39a2492a23e1550161692950bbe0 + sha256: "947bfcf187f74dbc5e146c9eb9c0f10c9f8b30743e341481c1e2ed3ecc18c20c" url: "https://pub.dev" source: hosted - version: "2.10.0" + version: "2.11.0" boolean_selector: dependency: transitive description: @@ -21,10 +21,10 @@ packages: dependency: transitive description: name: characters - sha256: e6a326c8af69605aec75ed6c187d06b349707a27fbff8222ca9cc2cff167975c + sha256: "04a925763edad70e8443c99234dc3328f442e811f1d8fd1a72f1c8ad0f69a605" url: "https://pub.dev" source: hosted - version: "1.2.1" + version: "1.3.0" clock: dependency: transitive description: @@ -37,18 +37,10 @@ packages: dependency: transitive description: name: collection - sha256: cfc915e6923fe5ce6e153b0723c753045de46de1b4d63771530504004a45fae0 - url: "https://pub.dev" - source: hosted - version: "1.17.0" - cupertino_icons: - dependency: "direct main" - description: - name: cupertino_icons - sha256: a937da4c006989739ceb4d10e3bd6cce64ca85d0fe287fc5b2b9f6ee757dcee6 + sha256: f092b211a4319e98e5ff58223576de6c2803db36221657b46c82574721240687 url: "https://pub.dev" source: hosted - version: "0.1.3" + version: "1.17.2" fake_async: dependency: transitive description: @@ -74,46 +66,38 @@ packages: relative: true source: path version: "3.2.0" - js: - dependency: transitive - description: - name: js - sha256: "5528c2f391ededb7775ec1daa69e65a2d61276f7552de2b5f7b8d34ee9fd4ab7" - url: "https://pub.dev" - source: hosted - version: "0.6.5" matcher: dependency: transitive description: name: matcher - sha256: "16db949ceee371e9b99d22f88fa3a73c4e59fd0afed0bd25fc336eb76c198b72" + sha256: "1803e76e6653768d64ed8ff2e1e67bea3ad4b923eb5c56a295c3e634bad5960e" url: "https://pub.dev" source: hosted - version: "0.12.13" + version: "0.12.16" material_color_utilities: dependency: transitive description: name: material_color_utilities - sha256: d92141dc6fe1dad30722f9aa826c7fbc896d021d792f80678280601aff8cf724 + sha256: "9528f2f296073ff54cb9fee677df673ace1218163c3bc7628093e7eed5203d41" url: "https://pub.dev" source: hosted - version: "0.2.0" + version: "0.5.0" meta: dependency: transitive description: name: meta - sha256: "6c268b42ed578a53088d834796959e4a1814b5e9e164f147f580a386e5decf42" + sha256: "3c74dbf8763d36539f114c799d8a2d87343b5067e9d796ca22b5eb8437090ee3" url: "https://pub.dev" source: hosted - version: "1.8.0" + version: "1.9.1" path: dependency: transitive description: name: path - sha256: db9d4f58c908a4ba5953fcee2ae317c94889433e5024c27ce74a37f94267945b + sha256: "8829d8a55c13fc0e37127c29fedf290c102f4e40ae94ada574091fe0ff96c917" url: "https://pub.dev" source: hosted - version: "1.8.2" + version: "1.8.3" sky_engine: dependency: transitive description: flutter @@ -123,10 +107,10 @@ packages: dependency: transitive description: name: source_span - sha256: dd904f795d4b4f3b870833847c461801f6750a9fa8e61ea5ac53f9422b31f250 + sha256: "53e943d4206a5e30df338fd4c6e7a077e02254531b138a15aec3bd143c1a8b3c" url: "https://pub.dev" source: hosted - version: "1.9.1" + version: "1.10.0" stack_trace: dependency: transitive description: @@ -163,10 +147,10 @@ packages: dependency: transitive description: name: test_api - sha256: ad540f65f92caa91bf21dfc8ffb8c589d6e4dc0c2267818b4cc2792857706206 + sha256: "75760ffd7786fffdfb9597c35c5b27eaeec82be8edfb6d71d32651128ed7aab8" url: "https://pub.dev" source: hosted - version: "0.4.16" + version: "0.6.0" vector_math: dependency: transitive description: @@ -175,5 +159,13 @@ packages: url: "https://pub.dev" source: hosted version: "2.1.4" + web: + dependency: transitive + description: + name: web + sha256: dc8ccd225a2005c1be616fe02951e2e342092edf968cf0844220383757ef8f10 + url: "https://pub.dev" + source: hosted + version: "0.1.4-beta" sdks: - dart: ">=2.18.0 <3.0.0" + dart: ">=3.1.0-185.0.dev <4.0.0" diff --git a/example/pubspec.yaml b/example/pubspec.yaml index d3ff613e..5980d734 100644 --- a/example/pubspec.yaml +++ b/example/pubspec.yaml @@ -7,12 +7,11 @@ publish_to: "none" # Remove this line if you wish to publish to pub.dev version: 1.0.0+1 environment: - sdk: ">=2.7.0 <3.0.0" + sdk: ">=2.12.0 <3.0.0" dependencies: flutter: sdk: flutter - cupertino_icons: ^0.1.3 intl_phone_field: path: ../ diff --git a/lib/countries.dart b/lib/countries.dart index bfca7758..73bc8d4e 100644 --- a/lib/countries.dart +++ b/lib/countries.dart @@ -4091,8 +4091,8 @@ const List countries = [ flag: "πŸ‡²πŸ‡Ύ", code: "MY", dialCode: "60", - minLength: 11, - maxLength: 11, + minLength: 9, + maxLength: 10, ), Country( name: "Maldives", @@ -6602,8 +6602,8 @@ const List countries = [ flag: "πŸ‡ΈπŸ‡Ύ", code: "SY", dialCode: "963", - minLength: 10, - maxLength: 10, + minLength: 9, + maxLength: 9, ), Country( name: "Taiwan", diff --git a/lib/country_picker_dialog.dart b/lib/country_picker_dialog.dart index 2c676db0..8d078a60 100644 --- a/lib/country_picker_dialog.dart +++ b/lib/country_picker_dialog.dart @@ -59,7 +59,7 @@ class CountryPickerDialog extends StatefulWidget { }) : super(key: key); @override - _CountryPickerDialogState createState() => _CountryPickerDialogState(); + State createState() => _CountryPickerDialogState(); } class _CountryPickerDialogState extends State { diff --git a/lib/intl_phone_field.dart b/lib/intl_phone_field.dart index 82450657..c6dfdb72 100644 --- a/lib/intl_phone_field.dart +++ b/lib/intl_phone_field.dart @@ -11,6 +11,9 @@ import './countries.dart'; import './phone_number.dart'; class IntlPhoneField extends StatefulWidget { + /// The TextFormField key. + final GlobalKey? formFieldKey; + /// Whether to hide the text being edited (e.g., for passwords). final bool obscureText; @@ -243,59 +246,60 @@ class IntlPhoneField extends StatefulWidget { //enable the autofill hint for phone number final bool disableAutoFillHints; - /// If null default magnification configuration will be used + /// If null, default magnification configuration will be used. final TextMagnifierConfiguration? magnifierConfiguration; - const IntlPhoneField( - {Key? key, - this.initialCountryCode, - this.languageCode = 'en', - this.disableAutoFillHints = false, - this.obscureText = false, - this.textAlign = TextAlign.left, - this.textAlignVertical, - this.onTap, - this.readOnly = false, - this.initialValue, - this.keyboardType = TextInputType.phone, - this.controller, - this.focusNode, - this.decoration = const InputDecoration(), - this.style, - this.dropdownTextStyle, - this.onSubmitted, - this.validator, - this.onChanged, - this.countries, - this.onCountryChanged, - this.onSaved, - this.showDropdownIcon = true, - this.dropdownDecoration = const BoxDecoration(), - this.inputFormatters, - this.enabled = true, - this.keyboardAppearance, - @Deprecated('Use searchFieldInputDecoration of PickerDialogStyle instead') this.searchText = 'Search country', - this.dropdownIconPosition = IconPosition.leading, - this.dropdownIcon = const Icon(Icons.arrow_drop_down), - this.autofocus = false, - this.textInputAction, - this.autovalidateMode = AutovalidateMode.onUserInteraction, - this.showCountryFlag = true, - this.cursorColor, - this.disableLengthCheck = false, - this.flagsButtonPadding = EdgeInsets.zero, - this.invalidNumberMessage = 'Invalid Mobile Number', - this.cursorHeight, - this.cursorRadius = Radius.zero, - this.cursorWidth = 2.0, - this.showCursor = true, - this.pickerDialogStyle, - this.flagsButtonMargin = EdgeInsets.zero, - this.magnifierConfiguration}) - : super(key: key); + const IntlPhoneField({ + Key? key, + this.formFieldKey, + this.initialCountryCode, + this.languageCode = 'en', + this.disableAutoFillHints = false, + this.obscureText = false, + this.textAlign = TextAlign.left, + this.textAlignVertical, + this.onTap, + this.readOnly = false, + this.initialValue, + this.keyboardType = TextInputType.phone, + this.controller, + this.focusNode, + this.decoration = const InputDecoration(), + this.style, + this.dropdownTextStyle, + this.onSubmitted, + this.validator, + this.onChanged, + this.countries, + this.onCountryChanged, + this.onSaved, + this.showDropdownIcon = true, + this.dropdownDecoration = const BoxDecoration(), + this.inputFormatters, + this.enabled = true, + this.keyboardAppearance, + @Deprecated('Use searchFieldInputDecoration of PickerDialogStyle instead') this.searchText = 'Search country', + this.dropdownIconPosition = IconPosition.leading, + this.dropdownIcon = const Icon(Icons.arrow_drop_down), + this.autofocus = false, + this.textInputAction, + this.autovalidateMode = AutovalidateMode.onUserInteraction, + this.showCountryFlag = true, + this.cursorColor, + this.disableLengthCheck = false, + this.flagsButtonPadding = EdgeInsets.zero, + this.invalidNumberMessage = 'Invalid Mobile Number', + this.cursorHeight, + this.cursorRadius = Radius.zero, + this.cursorWidth = 2.0, + this.showCursor = true, + this.pickerDialogStyle, + this.flagsButtonMargin = EdgeInsets.zero, + this.magnifierConfiguration, + }) : super(key: key); @override - _IntlPhoneFieldState createState() => _IntlPhoneFieldState(); + State createState() => _IntlPhoneFieldState(); } class _IntlPhoneFieldState extends State { @@ -378,6 +382,7 @@ class _IntlPhoneFieldState extends State { @override Widget build(BuildContext context) { return TextFormField( + key: widget.formFieldKey, initialValue: (widget.controller == null) ? number : null, autofillHints: widget.disableAutoFillHints ? null : [AutofillHints.telephoneNumberNational], readOnly: widget.readOnly, diff --git a/pubspec.lock b/pubspec.lock index 8cd5a541..9fad3df1 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -61,10 +61,10 @@ packages: dependency: transitive description: name: collection - sha256: "4a07be6cb69c84d677a6c3096fcf960cc3285a8330b4603e0d463d15d9bd934c" + sha256: f092b211a4319e98e5ff58223576de6c2803db36221657b46c82574721240687 url: "https://pub.dev" source: hosted - version: "1.17.1" + version: "1.17.2" convert: dependency: transitive description: @@ -191,18 +191,18 @@ packages: dependency: transitive description: name: matcher - sha256: "6501fbd55da300384b768785b83e5ce66991266cec21af89ab9ae7f5ce1c4cbb" + sha256: "1803e76e6653768d64ed8ff2e1e67bea3ad4b923eb5c56a295c3e634bad5960e" url: "https://pub.dev" source: hosted - version: "0.12.15" + version: "0.12.16" material_color_utilities: dependency: transitive description: name: material_color_utilities - sha256: d92141dc6fe1dad30722f9aa826c7fbc896d021d792f80678280601aff8cf724 + sha256: "9528f2f296073ff54cb9fee677df673ace1218163c3bc7628093e7eed5203d41" url: "https://pub.dev" source: hosted - version: "0.2.0" + version: "0.5.0" meta: dependency: transitive description: @@ -316,10 +316,10 @@ packages: dependency: transitive description: name: source_span - sha256: dd904f795d4b4f3b870833847c461801f6750a9fa8e61ea5ac53f9422b31f250 + sha256: "53e943d4206a5e30df338fd4c6e7a077e02254531b138a15aec3bd143c1a8b3c" url: "https://pub.dev" source: hosted - version: "1.9.1" + version: "1.10.0" stack_trace: dependency: transitive description: @@ -356,26 +356,26 @@ packages: dependency: "direct dev" description: name: test - sha256: "3dac9aecf2c3991d09b9cdde4f98ded7b30804a88a0d7e4e7e1678e78d6b97f4" + sha256: "13b41f318e2a5751c3169137103b60c584297353d4b1761b66029bae6411fe46" url: "https://pub.dev" source: hosted - version: "1.24.1" + version: "1.24.3" test_api: dependency: transitive description: name: test_api - sha256: eb6ac1540b26de412b3403a163d919ba86f6a973fe6cc50ae3541b80092fdcfb + sha256: "75760ffd7786fffdfb9597c35c5b27eaeec82be8edfb6d71d32651128ed7aab8" url: "https://pub.dev" source: hosted - version: "0.5.1" + version: "0.6.0" test_core: dependency: transitive description: name: test_core - sha256: "5138dbffb77b2289ecb12b81c11ba46036590b72a64a7a90d6ffb880f1a29e93" + sha256: "99806e9e6d95c7b059b7a0fc08f07fc53fabe54a829497f0d9676299f1e8637e" url: "https://pub.dev" source: hosted - version: "0.5.1" + version: "0.5.3" typed_data: dependency: transitive description: @@ -408,6 +408,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.1.0" + web: + dependency: transitive + description: + name: web + sha256: dc8ccd225a2005c1be616fe02951e2e342092edf968cf0844220383757ef8f10 + url: "https://pub.dev" + source: hosted + version: "0.1.4-beta" web_socket_channel: dependency: transitive description: @@ -433,4 +441,4 @@ packages: source: hosted version: "3.1.2" sdks: - dart: ">=3.0.0 <4.0.0" + dart: ">=3.1.0-185.0.dev <4.0.0"