1
+ import 'package:dlibphonenumber/dlibphonenumber.dart' as p;
1
2
import 'package:intl_phone_number_input/src/utils/phone_number.dart' ;
2
- import 'package:libphonenumber_plugin/libphonenumber_plugin.dart' as p;
3
3
4
- /// A wrapper class [PhoneNumberUtil] that basically switch between plugin available for `Web` or `Android or IOS` and `Other platforms` when available.
5
4
class PhoneNumberUtil {
5
+ static p.PhoneNumberUtil phoneUtil = p.PhoneNumberUtil .instance;
6
+
6
7
/// [isValidNumber] checks if a [phoneNumber] is valid.
7
8
/// Accepts [phoneNumber] and [isoCode]
8
9
/// Returns [Future<bool>] .
@@ -11,35 +12,41 @@ class PhoneNumberUtil {
11
12
if (phoneNumber.length < 2 ) {
12
13
return false ;
13
14
}
14
- return p.PhoneNumberUtil .isValidPhoneNumber (phoneNumber, isoCode);
15
+ final number = phoneUtil.parse (phoneNumber, isoCode.toUpperCase ());
16
+ return phoneUtil.isValidNumber (number);
15
17
}
16
18
17
19
/// [normalizePhoneNumber] normalizes a string of characters representing a phone number
18
20
/// Accepts [phoneNumber] and [isoCode]
19
21
/// Returns [Future<String>]
20
22
static Future <String ?> normalizePhoneNumber (
21
23
{required String phoneNumber, required String isoCode}) async {
22
- return p.PhoneNumberUtil .normalizePhoneNumber (phoneNumber, isoCode);
24
+ final number = phoneUtil.parse (phoneNumber, isoCode.toUpperCase ());
25
+ return phoneUtil.format (number, p.PhoneNumberFormat .e164);
23
26
}
24
27
25
28
/// Accepts [phoneNumber] and [isoCode]
26
29
/// Returns [Future<RegionInfo>] of all information available about the [phoneNumber]
27
30
static Future <RegionInfo > getRegionInfo (
28
31
{required String phoneNumber, required String isoCode}) async {
29
- var response = await p.PhoneNumberUtil .getRegionInfo (phoneNumber, isoCode);
30
-
32
+ final number = phoneUtil.parse (phoneNumber, isoCode.toUpperCase ());
33
+ final regionCode = phoneUtil.getRegionCodeForNumber (number);
34
+ final countryCode = number.countryCode.toString ();
35
+ final formattedNumber =
36
+ phoneUtil.format (number, p.PhoneNumberFormat .national);
31
37
return RegionInfo (
32
- regionPrefix: response.regionPrefix,
33
- isoCode: response.isoCode,
34
- formattedPhoneNumber: response.formattedPhoneNumber);
38
+ regionPrefix: countryCode,
39
+ isoCode: regionCode,
40
+ formattedPhoneNumber: formattedNumber,
41
+ );
35
42
}
36
43
37
44
/// Accepts [phoneNumber] and [isoCode]
38
45
/// Returns [Future<PhoneNumberType>] type of phone number
39
46
static Future <PhoneNumberType > getNumberType (
40
47
{required String phoneNumber, required String isoCode}) async {
41
- final dynamic type =
42
- await p. PhoneNumberUtil . getNumberType (phoneNumber, isoCode);
48
+ final p. PhoneNumberType type = phoneUtil
49
+ . getNumberType (phoneUtil. parse ( phoneNumber, isoCode. toUpperCase ()) );
43
50
44
51
return PhoneNumberTypeUtil .getType (type.index);
45
52
}
@@ -49,7 +56,12 @@ class PhoneNumberUtil {
49
56
/// Returns [Future<String>]
50
57
static Future <String ?> formatAsYouType (
51
58
{required String phoneNumber, required String isoCode}) async {
52
- return p.PhoneNumberUtil .formatAsYouType (phoneNumber, isoCode);
59
+ final asYouTypeFormatter = phoneUtil.getAsYouTypeFormatter (isoCode);
60
+ String ? result;
61
+ for (int i = 0 ; i < phoneNumber.length; i++ ) {
62
+ result = asYouTypeFormatter.inputDigit (phoneNumber[i]);
63
+ }
64
+ return result;
53
65
}
54
66
}
55
67
@@ -138,7 +150,7 @@ extension phonenumbertypeproperties on PhoneNumberType {
138
150
return 6 ;
139
151
case PhoneNumberType .PERSONAL_NUMBER :
140
152
return 7 ;
141
- case PhoneNumberType .PREMIUM_RATE :
153
+ case PhoneNumberType .PAGER :
142
154
return 8 ;
143
155
case PhoneNumberType .UAN :
144
156
return 9 ;
0 commit comments