【发布时间】:2019-08-29 07:29:33
【问题描述】:
如何使用 Firebase 在 Flutter 中实现电话号码验证?我的应用需要在某个时间点验证电话号码。不需要通过电话号码进行身份验证。我只需要验证我的号码。我如何实现它?
【问题讨论】:
标签: firebase flutter firebase-authentication phone-number
如何使用 Firebase 在 Flutter 中实现电话号码验证?我的应用需要在某个时间点验证电话号码。不需要通过电话号码进行身份验证。我只需要验证我的号码。我如何实现它?
【问题讨论】:
标签: firebase flutter firebase-authentication phone-number
在 Firebase 中,电话号码验证也会自动对用户进行身份验证。如果不让用户登录,就无法使用 Firebase 身份验证来验证用户的电话号码。
【讨论】:
手动进行,使用PhoneNumberUtil 类和代码中的手动方法来验证国家/地区代码
在这种情况下,该方法检查号码的国家代码,我指定只允许国家代码为“KE”的肯尼亚号码
_checkPhoneNumber() async {
var s = phoneTextFieldController.text;
bool isValid;
if (s.length == 0) {
isValid = true;
setState(() {
_isPhoneNumber = isValid;
});
return;
}
//check if the number starts with '0' , or '07' or '254'
if (s.length < 10) {
isValid = s.length == 1 && s[0] == '0' ||
s.length > 1 && s[0] + s[1] == '07' ||
s.length > 1 && s[0] + s[1] + s[2] == '254' ||
s.length > 1 && s[0] + s[1] + s[2] + s[3] == '+254';
setState(() {
_isPhoneNumber = isValid;
});
return;
}
isValid =
await PhoneNumberUtil.isValidPhoneNumber(phoneNumber: s, isoCode: 'KE');
String normalizedNumber = await PhoneNumberUtil.normalizePhoneNumber(
phoneNumber: s, isoCode: 'KE');
RegionInfo regionInfo =
await PhoneNumberUtil.getRegionInfo(phoneNumber: s, isoCode: 'KE');
setState(() {
_isPhoneNumber = isValid;
});
}
然后在你的表单中有
child: TextFormField(
onChanged: (text) {
_checkPhoneNumber();
},
controller: phoneTextFieldController,
keyboardType: TextInputType.phone,
validator: (val) {
if (val == '') {
return 'Phone Number is required';
}
if (!_isPhoneNumber) {
return 'Phone Number format error';
}
},
decoration: InputDecoration(
hintText: "2547xx xxx xxx - Phone",
border: InputBorder.none,
icon: const Icon(
Icons.phone,
),
labelText: 'Phone',
prefixText: ' ',
suffixStyle:
const TextStyle(color: Colors.green)),
onSaved: (value) {
phoneNumberForm = value;
},
)),
然后在表单提交时检查表单状态
buttonCustom(
color: Color(0xFF4458be),
heigth: 50.0,
txt: contactIdParam!=null ?"Submit Edit":"Submit",
ontap: () {
final _form = form.currentState;
if (_form.validate()) {
if(contactIdParam!=null){
_editContactRequest();
}else{
_addContactRequest();
}
} else {
print('form is invalid');
}
},
),
注意:从我的工作代码中复制了 sn-ps 我的验证将与您想要的不同,但您需要的只是逻辑
【讨论】: