In meiner Firebase-Konsole und meiner Flutter-App werden Nullwerte für den Benutzernamen angezeigtIOS

Programmierung für iOS
Anonymous
 In meiner Firebase-Konsole und meiner Flutter-App werden Nullwerte für den Benutzernamen angezeigt

Post by Anonymous »

Wenn ich in Firebase speichere, gehen Daten wie Benutzername, Telefonnummer und Status verloren und nur die UID bleibt erhalten.
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");
}
}
}
Der Code zum Generieren der UID:

Code: Select all

Future getCurrentUID() async => auth.currentUser!.uid;
Der folgende Code generiert den Anzeigenamen, ist jedoch nicht dauerhaft. Er wird kurz nach Null angezeigt, nachdem er einige Sekunden lang auf FireBSe sichtbar war

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";
}
Der Code für den Blocprovider im Widget ist unten;

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');
}
Der Code für die Elle ist unten angegeben

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));
}

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post