如何使用Firebase在Flutter中实施电话号码验证?我的应用需要在某个时间点验证电话号码。不需要通过电话号码进行身份验证。我只需要验证我的电话号码即可。我该如何实现?
答案 0 :(得分:1)
在Firebase中,电话号码验证也会自动验证用户身份。如果不登录,则无法使用Firebase身份验证来验证用户的电话号码。
答案 1 :(得分:0)
使用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');
}
},
),
Nb:从我的工作代码中复制了代码片段,我的验证将不同于您想要的内容,但您需要的只是逻辑