skip to Main Content

I’m new to flutter. I have problems with how to fetch the current user document ID/name using syntax.

  Future<User?> readUser() async {
    final docUser =
        FirebaseFirestore.instance.collection('users').doc('How do I get this document ID');
        
    final snapshot = await docUser.get();

    if (snapshot.exists) {
      return User.fromJson(snapshot.data()!);
    } else {
      print('User does not exist');
    }
  }

This is my User class where i store my details

class User {
  String uid;
  final String name;
  final int age;
  final String email;

  User({
    this.uid = '',
    required this.name,
    required this.age,
    required this.email,
  });
  Map<String, dynamic> toJson() => {
        'uid': uid,
        'name': name,
        'age': age,
        'email': email,
      };

  static User fromJson(Map<String, dynamic> json) => User(
        uid: json['id'],
        name: json['name'],
        age: json['age'],
        email: json['email'],
      );
}

I tried

final firebaseUser = await FirebaseAuth.instance.currentUser
  Future<User?> readUser() async {
    final docUser =
        FirebaseFirestore.instance.collection('users').doc(firebaseUser.uid);
        
    final snapshot = await docUser.get();

    if (snapshot.exists) {
      return User.fromJson(snapshot.data()!);
    } else {
      print('User does not exist');
    }
  }

But it does not work

the image for my firestore is here

2

Answers


  1. To access the current user id use FirebaseAuth.instance.currentUser!.uid

    To access the current user name use FirebaseAuth.instance.currentUser!.displayName


    How to listen to the current user’s document ?

    class _UserInformationState extends State<UserInformation> {
      final _usersStream = FirebaseFirestore.instance
          .collection('users')
          .doc(FirebaseAuth.instance.currentUser!.uid) 
          .snapshots();
    
      @override
      Widget build(BuildContext context) {
        return Scaffold(
          body: Center(
            child: StreamBuilder<DocumentSnapshot<Map<String, dynamic>>>(
              stream: _usersStream,
              builder:
                  (BuildContext context, AsyncSnapshot<DocumentSnapshot> snapshot) {
                if (snapshot.hasError) {
                  return const Text('Something went wrong');
                }
                if (snapshot.connectionState == ConnectionState.waiting) {
                  return const Text("Loading");
                }
                Map<String, dynamic> data =
                    snapshot.data!.data()! as Map<String, dynamic>;
                return Text(data['fullName']);
              },
            ),
          ),
        );
      }
    }
    
    Login or Signup to reply.
  2. It’s just snapshot.id

    For example

      Future<T> get<T>({
        String path,
        T Function(Map<String, dynamic> data, String documentID) builder,
      }) async {
        final reference = FirebaseFirestore.instance.doc(path);
        final DocumentSnapshot snapshot = await reference.get();
        return builder(snapshot.data() as Map<String, dynamic>, snapshot.id);
      }
    
    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search