如何在Flutter中将Firebase Auth中的用户ID链接到Firestore中的用户ID

pvcm50d1  于 2022-11-17  发布在  Flutter
关注(0)|答案(1)|浏览(156)

当我的用户注册时,他输入了他的电子邮件地址,用户名和密码。2电子邮件地址和密码被存储在Firebase Auth数据库中。3因此,一个ID被创建并与这个用户相关联。(例如kmupeDXnfEYnhbdpkvLUoFbIjnb 2)。现在我想创建一个用户配置文件(个人资料图片、用户名我必须创建一个Firestore集合和文档,其中包含链接到Firebase auth的用户名和ID(kmupeDXnfEYnhbdpkvLUoFbIjnb 2).我不知道该怎么做,有人能帮助我吗?非常感谢!x1c 0d1x

import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:firebase_auth/firebase_auth.dart';
import 'package:flutter/material.dart';
import 'package:flutter_dev/reusable.dart';
import 'package:flutter_dev/home.dart';

class SignUp extends StatefulWidget {
  const SignUp({super.key});

  @override
  State<SignUp> createState() => _SignUpState();
}

class _SignUpState extends State<SignUp> {
  final TextEditingController _passwordTextController = TextEditingController();
  final TextEditingController _emailTextController = TextEditingController();
  final TextEditingController _userNameTextController = TextEditingController();

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      resizeToAvoidBottomInset: false,
      extendBodyBehindAppBar: true,
      appBar: AppBar(
        backgroundColor: Colors.transparent,
        elevation: 0,
        title: const Text('Sign Up'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            const SizedBox(
              height: 20,
            ),
            reusableTextField("Enter Username", Icons.person_outline, false,
                _userNameTextController, context),
            const SizedBox(
              height: 20,
            ),
            reusableTextField("Enter Email ID", Icons.email_outlined, false,
                _emailTextController, context),
            const SizedBox(
              height: 20,
            ),
            reusableTextField("Enter Password", Icons.lock_outline, true,
                _passwordTextController, context),
            const SizedBox(
              height: 20,
            ),
            signInsignUpButton(context, false, () {

             final db = FirebaseFirestore.instance;

              db.collection("users").doc("uid").set({
                'fullName': _userNameTextController,
                'email': _emailTextController,
                'accountCreated': Timestamp.now(),
              }).onError((e, _) => print("Error writing document: $e"));

              FirebaseAuth.instance
                  .createUserWithEmailAndPassword(
                      email: _emailTextController.text,
                      password: _passwordTextController.text)
                  .then((value) {
                print("Created New Account");
                Navigator.pushReplacement(context,
                    MaterialPageRoute(builder: (context) => const Home()));
              }).onError((error, stackTrace) {
                print("Error ${error.toString()}");
              });
            }),
          ],
        ),
      ),
    );
  }
}
zf9nrax1

zf9nrax11#

我相信这将做你想要的:

import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:firebase_auth/firebase_auth.dart';
import 'package:flutter/material.dart';
import 'package:flutter_dev/reusable.dart';
import 'package:flutter_dev/home.dart';

class SignUp extends StatefulWidget {
  const SignUp({super.key});

  @override
  State<SignUp> createState() => _SignUpState();
}

class _SignUpState extends State<SignUp> {
  final TextEditingController _passwordTextController = TextEditingController();
  final TextEditingController _emailTextController = TextEditingController();
  final TextEditingController _userNameTextController = TextEditingController();

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      resizeToAvoidBottomInset: false,
      extendBodyBehindAppBar: true,
      appBar: AppBar(
        backgroundColor: Colors.transparent,
        elevation: 0,
        title: const Text('Sign Up'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            const SizedBox(
              height: 20,
            ),
            reusableTextField("Enter Username", Icons.person_outline, false,
                _userNameTextController, context),
            const SizedBox(
              height: 20,
            ),
            reusableTextField("Enter Email ID", Icons.email_outlined, false,
                _emailTextController, context),
            const SizedBox(
              height: 20,
            ),
            reusableTextField("Enter Password", Icons.lock_outline, true,
                _passwordTextController, context),
            const SizedBox(
              height: 20,
            ),
            signInsignUpButton(context, false, () {
              FirebaseAuth.instance
                  .createUserWithEmailAndPassword(
                      email: _emailTextController.text,
                      password: _passwordTextController.text)
                  .then((value) {
                final db = FirebaseFirestore.instance;

                db.collection("users").doc("uid/${value.user.uid}").set({
                  'fullName': _userNameTextController.text,
                  'email': _emailTextController.text,
                  'accountCreated': Timestamp.now(),
                }).onError((e, _) => print("Error writing document: $e"));
                print("Created New Account");
                Navigator.pushReplacement(context,
                    MaterialPageRoute(builder: (context) => const Home()));
              }).onError((error, stackTrace) {
                print("Error ${error.toString()}");
              });
            }),
          ],
        ),
      ),
    );
  }
}

FirebaseAuth.instance.createUserWithEmailAndPassword(回调的类型为UserCredential。您可以通过以下UserCredential访问uidvalue.user.uid

相关问题