我正在构建一个聊天应用程序,它使用用户的电话号码和国家代码进行注册。注册并获得许可后,我使用 contacts_service 插件访问本地设备上的联系人。然后我通过电话号码检查是否已经在我的聊天应用程序中注册了这些号码,以便我可以显示应用程序内的联系人。
我面临的问题是,可以找到多种不同格式的本地电话号码,有些有国家代码,有些没有,等等。而在注册过程中,我将国家代码与电话号码一起使用。因此,让我们假设一个电话号码不是以国家代码开头,而是以“0”开头。 我怎么知道这个电话号码是哪个国家的?
目前,我正在使用这种方法来格式化电话号码,但效率不高。当我找不到电话号码的国家代码时,我只需将设备的国家代码附加到该电话号码即可。
Future<String> formatPhoneNumber(String number) async {
number = number.replaceAll(" ", "");
number = number.replaceAll("-", "");
number = number.replaceAll("(", "");
number = number.replaceAll(")", "");
if (number[0] != "+") {
/// number is not starting with '+'
String code = await PhoneNumberUtil().carrierRegionCode(); // get country code
code = code.toUpperCase();
if (number[0] == "0") {
/// starts with '0'
/// replace '0' with users country code
number = number.substring(1);
int countryIndex = CountryCodes.countries
.indexWhere((element) => element["code"] == code);
if (countryIndex >= 0) {
number = CountryCodes.countries[countryIndex]["dial_code"] + number;
}
} else {
if (number.length <= 10) {
/// number is without '+', '0' and country code
int countryIndex = CountryCodes.countries
.indexWhere((element) => element["code"] == code);
if (countryIndex >= 0) {
number = CountryCodes.countries[countryIndex]["dial_code"] + number;
}
} else {
/// numbers is starting with a country code
number = "+" + number;
}
}
try {
PhoneNumber formattedNumber =
await PhoneNumberUtil().parse(number, regionCode: code);
return formattedNumber.e164;
} catch (e) {
log("Error: $e");
}
}
return number;
}
你找到解决方案了吗?您的格式化方法是否有效?