Snippets Collections
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:firebase_auth/firebase_auth.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';

import '../screens/SignUpScreen.dart';

class UserModel {
  String userID;
  String firstName;
  String lastName;
  String email;
  String imageURL;
  bool emailVerified;
  bool profileCompleted;
  String fcmToken;
  String osType;
  String country;
  String flagCode;
  int dateOfBirth;
  String bio;
  Map<String, dynamic> geo; // New geo field
  bool onlineStatus; // New onlineStatus field

  // Default constructor with named parameters
  UserModel({
    this.userID = '',
    this.firstName = '',
    this.lastName = '',
    this.email = '',
    this.imageURL = '',
    this.emailVerified = false,
    this.profileCompleted = false,
    this.fcmToken = '',
    this.osType = '',
    this.country = '',
    this.flagCode = '',
    this.dateOfBirth = 0,
    this.bio = '',
    this.geo = const {}, // Initialize the geo field with an empty map
    this.onlineStatus = false, // Initialize the onlineStatus field
  });

  // Factory constructor to create UserModel from Firestore document
  factory UserModel.fromDocument(DocumentSnapshot document) {
    return UserModel(
      userID: document['userID'] ?? '',
      firstName: document['firstName'] ?? '',
      lastName: document['lastName'] ?? '',
      email: document['email'] ?? '',
      imageURL: document['imageURL'] ?? '',
      emailVerified: document['emailVerified'] ?? false,
      profileCompleted: document['profileCompleted'] ?? false,
      fcmToken: document['fcmToken'] ?? '',
      osType: document['osType'] ?? '',
      country: document['country'] ?? '',
      flagCode: document['flagCode'] ?? '',
      dateOfBirth: document['dateOfBirth'] ?? 0,
      bio: document['bio'] ?? '',
      geo: Map<String, dynamic>.from(document['geo'] ?? {}), // New geo field
      onlineStatus: document['onlineStatus'] ?? false, // New onlineStatus field
    );
  }

  // Factory constructor to create UserModel from a map
  factory UserModel.fromLinkedMap(Map<String, dynamic> map) {
    return UserModel(
      userID: map['userID'] ?? '',
      firstName: map['firstName'] ?? '',
      lastName: map['lastName'] ?? '',
      email: map['email'] ?? '',
      imageURL: map['imageURL'] ?? '',
      emailVerified: map['emailVerified'] ?? false,
      profileCompleted: map['profileCompleted'] ?? false,
      fcmToken: map['fcmToken'] ?? '',
      osType: map['osType'] ?? '',
      country: map['country'] ?? '',
      flagCode: map['flagCode'] ?? '',
      dateOfBirth: map['dateOfBirth'] ?? 0,
      bio: map['bio'] ?? '',
      geo: Map<String, dynamic>.from(map['geo'] ?? {}), // New geo field
      onlineStatus: map['onlineStatus'] ?? false, // New onlineStatus field
    );
  }

  // Method to convert UserModel to a map
  Map<String, dynamic> toMap() {
    return {
      'userID': userID,
      'firstName': firstName,
      'lastName': lastName,
      'email': email,
      'imageURL': imageURL,
      'emailVerified': emailVerified,
      'profileCompleted': profileCompleted,
      'fcmToken': fcmToken,
      'osType': osType,
      'country': country,
      'flagCode': flagCode,
      'dateOfBirth': dateOfBirth,
      'bio': bio,
      'geo': geo, // New geo field
      'onlineStatus': onlineStatus, // New onlineStatus field
    };
  }

  static Future<UserModel?> fetchCurrentUser(String userId, {bool fetchSnapshot = true}) async {
    User? user = FirebaseAuth.instance.currentUser;

    if (user == null) {
      print('User not logged in');
      return null;
    }

    if (userId.isEmpty) {
      userId = user.uid;
    }

    try {
      if (fetchSnapshot) {
        DocumentSnapshot documentSnapshot = await FirebaseFirestore.instance
            .collection('Users')
            .doc(userId)
            .get();

        if (documentSnapshot.exists) {
          return UserModel.fromDocument(documentSnapshot);
        } else {
          print('No document found');
          return null;
        }
      } else {
        // Fetch essential user details if fetchSnapshot is false
        DocumentSnapshot documentSnapshot = await FirebaseFirestore.instance
            .collection('Users')
            .doc(userId)
            .get();

        if (documentSnapshot.exists) {
          return UserModel.fromDocument(documentSnapshot);
        } else {
          print('No document found');
          return null;
        }
      }
    } catch (e) {
      print('Failed to fetch document: $e');
      return null;
    }
  }


  logOut(context) async {
    try {
      await FirebaseAuth.instance.signOut();
      Navigator.pushAndRemoveUntil(context, MaterialPageRoute(builder: (context) => const SignUpScreen()), (route) => false);
    } catch (e) {
      print('Logout failed: $e');
    }
  }
}
star

Sun Sep 01 2024 08:07:50 GMT+0000 (Coordinated Universal Time)

#dart #flutter #user #usermodel
star

Sun Aug 08 2021 22:53:31 GMT+0000 (Coordinated Universal Time) https://thinkster.io/tutorials/node-json-api/creating-the-user-model

#mongoose #usermodel

Save snippets that work with our extensions

Available in the Chrome Web Store Get Firefox Add-on Get VS Code extension