Ich verwende Cubit für die Statusverwaltung.
Der Code zum Erstellen eines Benutzers:
Code: Select all
Future createUser(UserEntity user) async {
final userCollection = firestore.collection(FirebaseCollectionConst.users);
final firebase_user = auth.currentUser;
if (firebase_user != null) {
final uid = await getCurrentUID();
final newUser = UserModels(
userName: user.userName,
email: user.email,
phoneNumber: user.phoneNumber,
isOnline: user.isOnline,
uid: uid,
status: user.status,
profileUrl: user.profileUrl,
).toDocument();
try {
userCollection.doc(uid).get().then((userDoc) {
if (!userDoc.exists) {
userCollection.doc(uid).set(newUser);
} else {
userCollection.doc(uid).update(newUser);
}
});
} catch (e) {
throw (" Error occured while creating user");
}
}
}
Code: Select all
Future getCurrentUID() async => auth.currentUser!.uid;
Code: Select all
Future updateDisplayName(String userName) async {
User? user = FirebaseAuth.instance.currentUser;
if (user != null) {
// Wait for the update to complete
await user.updateDisplayName(userName);
print("USER - ${user.displayName}");
// Force a reload of the user data from the server
await user.reload();
// Re-fetch the current user to get the refreshed object
user = FirebaseAuth.instance.currentUser;
print("Refreshed user display name: ${user?.displayName}");
return user?.displayName ?? "Unknown User"; // Return the new display name
}
// Return a default value or handle the case where the user is null
return "User not logged in";
}
Code: Select all
if (_nameController.text.isNotEmpty) {
BlocProvider.of(context).submitProfileInfo(
user: UserEntity(
userName: _nameController.text.trim(),
email: "",
phoneNumber: widget.phoneNumber,
status: "your status",
isOnline: false,
profileUrl: profileUrl,
),
);
} else {
toast('Your username is needed to proceed');
}
Code: Select all
Future submitProfileInfo({required UserEntity user}) async {
try {
await createUserUsecase.call(user);
emit(CredentialSuccess());
} on SocketException catch (_) {
emit(CredentialFailure());
} catch (_) {
emit(CredentialFailure());
}
Der Benutzermodellcode wird unten bereitgestellt
Code: Select all
class UserModels extends UserEntity {
@override
final String? userName;
@override
final String? email;
@override
final String? phoneNumber;
@override
final bool? isOnline;
@override
final String? uid;
@override
final String? status;
@override
final String? profileUrl;
@override
final String? fcmToken;
const UserModels({
this.userName,
this.email,
this.phoneNumber,
this.isOnline,
this.uid,
this.status,
this.profileUrl,
this.fcmToken,
}) : super(
userName: userName,
email: email,
phoneNumber: phoneNumber,
isOnline: isOnline,
uid: uid,
status: status,
profileUrl: profileUrl,
fcmToken: fcmToken,
);
Map toDocument() => {
'userName': userName,
'email': email,
'phoneNumber': phoneNumber,
'isOnline': isOnline,
'uid': uid,
'status': status,
'profileUrl': profileUrl,
'fcmToken': fcmToken,
};
factory UserModels.fromSnapShot(DocumentSnapshot snapshot) {
final snap = snapshot.data() as Map;
return UserModels(
userName: snap['userName'],
email: snap['email'],
phoneNumber: snap['phoneNumber'],
isOnline: snap['isOnline'],
uid: snap['uid'],
status: snap['status'],
profileUrl: snap['profileUrl'],
fcmToken: snap['fcmToken'],
);
}
String toJson() => json.encode(toDocument());
factory UserModels.fromJson(String source) =>
UserModels.fromSnapShot(json.decode(source));
}
Mobile version