создать нового пользователя на основе использования идентификатора пользователя в аутентификации - PullRequest
0 голосов
/ 01 ноября 2019

Я хочу создать пользователя, а затем профиль пользователя на основе использования идентификатора во время аутентификации. Но с моим кодом это создает профиль пользователя с другим идентификатором, хотя я уже получаю текущий идентификатор входа пользователя и использую его в установленных данных для профиля пользователя.

Вот мои коды для регистрации. После регистрации я напрямую авторизирую пользователей.

  Future <void> signUpValidate(String _email, _password) async {
    try {
      final snackBar = SnackBar(
        content: Text(
          'Loading please wait',
        ),
      );
      await authReference.createUserWithEmailAndPassword(
          email: _email, password: _password);
      FirebaseUser user = (await authReference.signInWithEmailAndPassword(
          email: _email, password: _password)).user;
      Navigator.push(context,MaterialPageRoute(builder: (context)
      => createEditProf()));
    }
    catch (e) {
      print(e.message);
      showDialog(
          context: context,
          builder: (BuildContext context) {
            return AlertDialog(
              title: Text('Ops something gone wrong'),
              content: Text('Email already exists'),
            );
          });
    }
  }

Затем я создаю форму для пользователя, чтобы создать его профиль. Вот код для этого:

Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Create/Edit Profile'),
      ),
     body: Form(
        key: _formKey,
        child: Column(
          crossAxisAlignment: CrossAxisAlignment.start,
          children: <Widget>[
            TextFormField(
              validator: (input){
                if (input.isEmpty){
                  return 'Please insert your name';
                }
              },
              controller: controlName,
              onSaved: (input) => _name = input,
              decoration: InputDecoration(
                  labelText: 'Name'
              ),
            ),

            TextFormField(
              validator: (input){
                if (input.length > 3){
                  return 'Age must below than 100';
                }
              },
              controller: controlAge,
              keyboardType: TextInputType.number,
              onSaved: (input) => _age = int.parse(input),
              decoration: InputDecoration(
                  labelText: 'Age'
              ),
            ),

            TextFormField(
              validator: (input){
                if (input.isEmpty){
                  return 'Insert your address';
                }
              },
              controller: controlAdd,
              onSaved: (input) => _address = input,
              decoration: InputDecoration(
                  labelText: 'Address'
              ),
            ),

            TextFormField(
              validator: (input){
                if (input.isEmpty){
                  return 'Insert your result';
                }
              },
              controller: controlRes,
              onSaved: (input) => _result = input,
              decoration: InputDecoration(
                  labelText: 'Result'
              ),
            ),

            Row(
              mainAxisAlignment: MainAxisAlignment.end,
              children: <Widget>[

                Padding(
                  padding: const EdgeInsets.symmetric(vertical: 8.0),
                  child: RaisedButton(
                    onPressed: submitProf,
                    child: Text('Submit'),
                  ),
                )

              ],
            )
          ],
        ),
      ),
    );
  }

  void submitProf(){
    if(_formKey.currentState.validate()){
      _formKey.currentState.save();
      addDataProf(_name, _age, _address, _result);
      controlName.clear();
      controlAge.clear();
    }
  }

  Future <void> addDataProf(String _name, int _age, String _address,
      String _result) async {
    try {
      final snackBar = SnackBar(
        content: Text(
          'Loading please wait',
        ),
      );
      UniQuery().setUserDetail();
      dbReference.collection('User').document(userID).setData(
        {'name' : _name, 'age' : _age,
          'address' : _address, 'result' : _result});
      Navigator.push(context,MaterialPageRoute(builder: (context)
      => mainmenu()));
    }
    catch (e) {
      print(e.message);
      showDialog(
          context: context,
          builder: (BuildContext context) {
            return AlertDialog(
              title: Text('Ops something gone wrong'),
              content: Text('Check your detail back'),
            );
          });
    }
  }

мой код для getCurrentLoginUserId

var userID;

   Future<String> getCurrentUser() async{
    final FirebaseUser user = await FirebaseAuth.instance.currentUser();
    final String uID = user.uid.toString();
    return uID;
  }

  setUserDetail() async{
    userID = await getCurrentUser();
  }

error uid

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