Как зарегистрироваться, используя email / пароль и отправить код на телефон в Firebase - PullRequest
0 голосов
/ 19 апреля 2020

Я хочу разрешить пользователям регистрировать учетную запись в моем приложении, используя флаттер с адресом электронной почты / паролем, а затем отправлять код на телефон. Поэтому, когда пользователь вводит свои данные для регистрации, он должен зарегистрировать их по электронной почте, а затем использовать свой телефон для проверки подлинности кода. Также пользователь не может завершить регистрацию и go на главной странице без проверки введенного кода.

Но в моем коде это не работает, что я хочу сделать.

Моя функция щелчка:

dynamic ruselt= await _auth.regsiterwithemail(_emailcontroller.text,_passwordcontroller.text);
if (ruselt!=null){
setState(() async {
  loading =false;
verfitycode().verfityphoen(context);
});
}else{
  setState(() {
    loading=false;

    SweetAlert.show(context,
        title: "Title",
        style: SweetAlertStyle.confirm,
        subtitle: "Subtitle");
  });
}

Моя функция регистрации:

Future  regsiterwithemail(String email , String password )
async {
  try{
    AuthResult result =await _auth.createUserWithEmailAndPassword(email: email, password: password);
    FirebaseUser user =result.user;

    print('oky');
    return _userfirebaseUser(user);

  }catch(e){

print(e.toString());
return null;
  }
}

класс для кода истинности

class verfitycode {

  String phonenumber;
  String smsCode;
  String vialdid;

  GlobalKey<FormState>_form;

  Future<void> verfityphoen(BuildContext context)async{

    final PhoneCodeAutoRetrievalTimeout AutoRetriv =(String verid) {
      this.vialdid =verid;
    };


    final PhoneCodeSent smsCodeset =(String verid,[int forceResendingToken]){
      this.vialdid=verid;
      smscodeDialog(context);

    };
    final PhoneVerificationCompleted verfiedcompletd=(AuthCredential user){
      print('verfild');
    };
    final PhoneVerificationFailed verfilederror =(AuthException exception){
      print('${exception.message}');
    };

    await FirebaseAuth.instance.verifyPhoneNumber(
        phoneNumber:"+967776523152",
        timeout: const Duration(seconds:5),
        verificationCompleted: verfiedcompletd,
        verificationFailed: verfilederror,
        codeSent: smsCodeset,
        codeAutoRetrievalTimeout: AutoRetriv
    );
  }

  Future<bool> smscodeDialog(BuildContext context){
    Alert(
        context: context,
        title: "رمز التحقق",
        content: Column(
          children: <Widget>[
            Form(
              key: _form,
              child: Directionality(
            textDirection: TextDirection.rtl,
          child:
            TextField(
              onChanged: (val){
                this.smsCode=val;
              },
              decoration:InputDecoration (
                icon: Icon(Icons.supervisor_account),
                labelText: 'ادخل رمز التحقق',
              ),
            ),
    )
            )
          ],

        ),
        buttons: [

          DialogButton(
              child: Text('خروج', style: TextStyle(color: Colors.white, fontSize:18)), onPressed:()=>Navigator.pop(context)),
          DialogButton(
            onPressed:  (){
                //  _form.currentState.validate();
                FirebaseAuth.instance.currentUser().then((user) {
                  if (user != null) {
                    Navigator.pop(context);
                    Navigator.push(context,
                        MaterialPageRoute(builder: (context) => Home()));
                  } else {
                    Navigator.pop(context);
                    _testSignlink();
                  }
                });

    },
            child: Text(
              "ادخل الرمز",
              style: TextStyle(color: Colors.white, fontSize:18),
            ),
          ),
        ]).show();

  }
  _testSignlink() async {
    FirebaseUser user;
    String _smsCodeController;
    final AuthCredential credential = PhoneAuthProvider.getCredential(
      verificationId: vialdid,
      smsCode: smsCode,
    );
    await user.linkWithCredential(credential).then((user){
      print(user.user.uid);
    }).catchError((onError){
      print(onError.toString());
    });
    _smsCodeController = '';
    return 'signInWithPhoneNumber succeeded: $user';
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...