Flutter 手机号码
PhoneNumber 是一个Flutter插件,允许您解析、验证和格式化国际电话号码。
该插件使用了 Android 的原生库 libphonenumber 和 iOS 的 PhoneNumberKit pod。
| 库 | 版本 |
|---|---|
| libphonenumber | 8.12.32 |
| PhoneNumberKit | 3.3.3 |
用法
解析
使用区域前缀解析手机号码。
String springFieldUSASimple = '+14175555470';
PhoneNumber phoneNumber = await PhoneNumberUtil().parse(springFieldUSASimple);
使用区域前缀和连字符解析手机号码。
String springFieldUSA = '+1-417-555-5470';
PhoneNumber phoneNumber = await PhoneNumberUtil().parse(springFieldUSA);
解析不带区域前缀的手机号码字符串。需要区域。国家代码可以在 这里 找到。
String springFieldUSASimpleNoRegion = '4175555470';
RegionInfo region = RegionInfo('US', 1);
PhoneNumber phoneNumber = await PhoneNumberUtil().parse(springFieldUSASimpleNoRegion, region: region);
解析有效的手机号码会得到一个手机号码对象
PhoneNumber{
e164: +14175555470,
type: PhoneNumberType.FIXED_LINE_OR_MOBILE,
international: +1 417-555-5470,
national: (417) 555-5470,
countryCode: 1,
nationalNumber: 4175555470,
errorCode: null,
}
验证
验证手机号码需要手机号码字符串和区域国家代码。
PhoneNumberUtil plugin = PhoneNumberUtil();
String springFieldUSASimpleNoRegion = '4175555470';
RegionInfo region = RegionInfo('US', 1);
bool isValid = await plugin.validate(springFieldUSASimpleNoRegion, region.code);
String springFieldUSASimple = '+14175555470';
bool isValid = await plugin.validate(springFieldUSASimple, region.code);
String springFieldUSA = '+1-417-555-5470';
bool isValid = await plugin.validate(springFieldUSA, region.code);
格式化
手机号码也可以被格式化以便在 UI 中显示。
String springFieldUSASimpleNoRegion = '4175555470';
RegionInfo region = RegionInfo('US', 1);
String formatted = await PhoneNumberUtil().format(springFieldUSASimpleNoRegion, region.code); // (417) 555-5470
PhoneNumber 不会添加国家前缀,除非手机号码本身就带有该前缀。
String springFieldUSASimpleNoRegion = '+14175555470';
RegionInfo region = RegionInfo('US', 1);
String formatted = await PhoneNumberUtil().format(springFieldUSASimpleNoRegion, region.code); // +1 (417) 555-5470
键入时格式化
将提供的 PhoneNumberEditingController 附加到 TextField,以便在用户键入时格式化其文本。
有 3 种格式化行为
PhoneInputBehavior.strict:始终格式化,不接受不可拨号的字符。PhoneInputBehavior.cancellable:移除分隔符时停止格式化,不接受不可拨号的字符。PhoneInputBehavior.lenient(默认):插入不可拨号的字符或移除分隔符时停止格式化。
示例视频:https://www.youtube.com/watch?v=rlLGVXCi-2Y。
有关详细实现,请参阅 example/lib/autoformat_page.dart。
地区
获取地区(国家代码和前缀)。
List<RegionInfo> regions = await plugin.allSupportedRegions();
// [ RegionInfo { code: IM, prefix: 44 }, RegionInfo { code: LU, prefix: 352 }, ... ]
如果您想在 UI 地区选择器中显示所有国家/地区的国旗,可以考虑使用 JSON 文件而不是此函数。示例 JSON 文件
const List<Map<String, dynamic>> countries = [
{"name":"Afghanistan","flag":"??","code":"AF","dial_code":"+93"},
{"name":"Åland Islands","flag":"??","code":"AX","dial_code":"+358"},
...
]
设备地区代码
可以从设备获取地区代码。这将为您提供两位字母的国家代码(例如:US、UK 等)。
String code = await plugin.carrierRegionCode();