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();

GitHub

https://github.com/nashfive/phone_number