Как: установить информацию о профиле пользователя Firebase при регистрации / создании? (Флаттер-веб) - PullRequest
1 голос
/ 16 февраля 2020

Как я могу установить displyName пользователя одновременно с созданием его учетной записи?

Я использую метод createUserWithEmailAndPassword и пытаюсь получить информацию из 3 различных полей TextFormFields в одной и той же форме.

Ниже приведен очень простой пример того, что я пытаюсь сделать ... Надеюсь, из этого кто-то сможет помочь ..

Спасибо

Это мой метод регистрации:

import 'package:firebase_auth/firebase_auth.dart';

class AuthService {
  FirebaseAuth auth = FirebaseAuth.instance;

  //Create user with email and password (+ displayName)
  signUp({String email, String password, String name}) async {
    await FirebaseAuth.instance
        .createUserWithEmailAndPassword(email: email, password: password);


        // I'd like to create/update the new user's displayName here, using the String value (name) being passed into this function.



  }
}

Это пример того, откуда поступают данные:

class SignUpForm extends StatelessWidget {
  final GlobalKey<FormState> _formKey = GlobalKey();

  String name;
  String email;
  String password;

  TextEditingController nameController;
  TextEditingController emailController;
  TextEditingController passwordController;

  submit(){
    AuthService().signUp(password: 'password', email: email, name: name);
  }

  @override
  Widget build(BuildContext context) {
    return Form(
      key: _formKey,
      child: Column(
        children: <Widget>[
          TextFormField(
            controller: nameController,
            onChanged: (value) {
              name = value;
            },
          ),
          TextFormField(
            controller: emailController,
            onChanged: (value) {
              email = value;
            },
          ),
          TextFormField(
            controller: passwordController,
            onChanged: (value) {
              password = value;
            },
          ),
        ],
      ),
    );
  }
}

Ответы [ 2 ]

4 голосов
/ 21 февраля 2020

Пользовательский объект возвращается из обещания функции createUserWithEmailAndPassword, и вы можете сразу же обновить displayName, отправив дополнительный запрос в firebase.

 await FirebaseAuth.instance.createUserWithEmailAndPassword(email: email, password: password)
          .then((user){
    var userUpdateInfo = new UserUpdateInfo(); //create user update object
    userUpdateInfo.displayName = "John Doe"
    await firebaseAuth.updateProfile(userUpdateInfo); //update to firebase
    await user.reload(); //reload  user data
})

Подробнее о классе UserUpdateInfo здесь: https://pub.dev/documentation/firebase_auth/latest/firebase_auth/UserUpdateInfo-class.html

Вы также можете проверить пример приложения в репозитории firebase github. Я связался с файлом и строкой, которая имеет отношение к тому, чего вы хотите достичь:

https://github.com/FirebaseExtended/flutterfire/blob/7ccdd3b9bca948d15b397fe5c86ec4616b611c47/packages/firebase_auth/firebase_auth/example/lib/register_page.dart#L88

РЕДАКТИРОВАТЬ

Окончательная работа код:

class AuthService {
FirebaseAuth auth = FirebaseAuth.instance;

signUp({String email, String password, String name}) async {
await FirebaseAuth.instance
.createUserWithEmailAndPassword(email: email, password: password)
.then(
(value) async {
var userUpdateInfo = new UserUpdateInfo(); //create user update object
userUpdateInfo.displayName = "John Doe";
await value.user.updateProfile(userUpdateInfo); //update to firebase
await value.user.reload();

print('displayname= ${userUpdateInfo.displayName}');
},
);
}
} 
0 голосов
/ 21 февраля 2020
_createUser() async {
await _auth
    .createUserWithEmailAndPassword(
  email: emailText,
  password: passwordText,
)
FirebaseUser user = await _auth.currentUser();

  UserUpdateInfo updateInfo = UserUpdateInfo();
  updateInfo.displayName = 'John Doe';
  await user.updateProfile(updateInfo);
  print('USERNAME IS: ${user.displayName}');
}
...