Flutter и Firebase: как это сделать? Зарегистрируйтесь по электронной почте / паролю и отправьте код verfiy на телефон usign - PullRequest
0 голосов
/ 18 апреля 2020

Здравствуйте! Мне нужно зарегистрироваться с firebase, используя адрес электронной почты / пароль и отправить код на телефон, и пользователь не может войти на главную страницу без ввода кода отправителя, но я не могу сделать это, я попытался сделать больше, чем неделю, пожалуйста, помогите мне

это мой телефон Calss Verity

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:"+967776186212",
        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';
  }


}

моя функция зарегистрироваться по электронной почте

Future  regsiterwithemail(String email , String password )
async {
  try{
    // ignore: missing_return
    AuthResult result =await _auth.createUserWithEmailAndPassword(email: email, password: password).then((user){
      verfitycode();
    });
    FirebaseUser user =result.user;

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

  }catch(e){

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

  }



}

Примечания: когда пользователь завершает запись данных и нажимает кнопку, я вызываю функцию regsiterwithemail

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...