Flutter : need update auth service class - flutter

I create Auth Class for firebase Auth version 0.11.1+10, now after update the packege firebase auth to last version some code is error.
Future<String> createUserWithEmailAndPassword(
String email, String password, String name) async {
final currentUser = await _firebaseAuth.createUserWithEmailAndPassword(
email: email,
password: password,
);
//updat username is error code ***************************
var userUpdateInfo = UserUpdateInfo();
userUpdateInfo.displayname = name;
await currentUser.updateProfile(userUpdateInfo);
await currentUser.reload();
return currentUser.uid;
}
See Error

UserUpdateInfo is now deprecated but you can use this instead
await FirebaseAuth.instance.currentUser.updateProfile();
And you pass the info you want to update to updateProfile()

Related

Can we set user displayName in firebase using password authentication through flutter? [duplicate]

I can save the email and the password with Firebase Authentication. I also save this information with Cloud Firestore. But how can I add and save the displayName after registering?
my code:
Future registerWithEmailAndPassword(String email, String password) async {
try {
AuthResult result = await _auth.createUserWithEmailAndPassword(
email: email, password: password);
FirebaseUser user = result.user;
// create a new document for the user with the uid
await DatabaseService(uid: user.uid)
.updateUserData('User', user.email, 'test.de/test.png', user.uid);
return _userFromFirebaseUser(user);
} catch (e) {
print(e.toString());
return null;
}
}
the register form button:
onPressed: () async {
if (_formKey.currentState.validate()) {
setState(() => loading = true);
dynamic result = await _auth
.registerWithEmailAndPassword(
email, password);
if (result == null) {
setState(() {
error = 'Valid email, please';
loading = false;
});
}
}
}
You can use updateProfile method given in the FirebaseUser class to update the name and photo url.
updateProfile({String displayName, String photoURL}).
For email you can use the different method
updateEmail(String newEmail) which is a async method.
Or to save the username directly into the firestore, after successful login you can use 'set' method of the FirebaseFirestore to save email, password and the username.
Here's the code if you want to save the Username together with the email and password
final FirebaseAuth _auth = FirebaseAuth.instance;
//register with email & password & save username instantly
Future registerWithEmailAndPassword(String name, String password, String email) async {
try {
UserCredential result = await _auth.createUserWithEmailAndPassword(email: email, password: password);
User user = result.user;
user.updateProfile(displayName: name); //added this line
return _user(user);
} catch(e) {
print(e.toString());
return null;
}
}
late User userFirebase;
Future<UserCredential> userCredential =await //Your code signin or signup
await userCredential.then((UserCredential value) {
userFirebase = value.user!;
});
await userFirebase.updateDisplayName(event.name);
You can use updateDisplayName() and updatePhotoURL() methods on a User object to add the displayName/profile image to Firebase user.
final userCredential = await _auth.createUserWithEmailAndPassword(
email: email,
password: password,
);
//After creating a user in Firebase, we then are able to change name/pictue
await userCredential.user?.updateDisplayName(name);
await userCredential.user?.updatePhotoURL(imageUrl);
As of october 2021, updateProfile() is deprecated, and you should use updateDisplayName() and updatePhotoURL() instead.

Flutter : Errors appearing after updating the Firebase auth package

I created the Firebase Auth class a year ago. Now After updating the Dart language and updating the firebase auth package some errors appeared.
import 'package:firebase_auth/firebase_auth.dart';
class AuthService {
final FirebaseAuth _firebaseAuth = FirebaseAuth.instance;
Stream<String> get onAuthStateChanged => _firebaseAuth.onAuthStateChanged.map(
(FirebaseUser user) => user.uid,
);
// Sign up Email & passowrd
Future<String> createUserWithEmailAndPassword(
String email, String password, String name) async {
final currentUser = await _firebaseAuth.createUserWithEmailAndPassword(
email: email,
password: password,
);
//updat username
var userUpdateInfo = UserUpdateInfo();
userUpdateInfo.displayName = name;
await currentUser.updateProfile(userUpdateInfo);
await currentUser.reload();
return currentUser.uid;
}
// sign in Email & password
Future<String> sinInWithEmailAndPassword(
String email, String password) async {
return (await _firebaseAuth.signInWithEmailAndPassword(
email: email, password: password))
.uid;
}
// sign out
signOut() {
return _firebaseAuth.signOut();
}
}
click here to see error
All firebase plugins for flutter since a year ago have a lot of breaking changes you should go to firebase.flutter.dev and check it
I've been trying and searching for more than two weeks The error appears in the code:
//updat username
var userUpdateInfo = UserUpdateInfo();
userUpdateInfo.displayName = name;
await currentUser.updateProfile(userUpdateInfo);
await currentUser.reload();
return currentUser.uid;
}
The method 'UserUpdateInfo' isn't defined for the type 'AuthService'

Flutter - Firebase Realtime Database Problem

I have recently approached the world of flutter and now I have a problem, in practice I need to write during the first recording of data in a Realtime Database.
I created the void function (I've done the association final databaseReference = FirebaseDatabase.instance.reference(); before.
This is the function
void writeDB() async{
User user = await _firebaseAuth.currentUser;
FirebaseDatabase.instance.reference().child('user').equalTo(user.uid);
databaseReference.child('user').set({
'email': FirebaseAuth.instance.currentUser.email,
'name': "",
'nick': "",
"score": "0"
});
}
And this is the signIn function :
Future<String> signIn(String email, String password) async {
UserCredential result = await _firebaseAuth.signInWithEmailAndPassword(
email: email, password: password);
writeDB();
User user = result.user;
return user.uid;
}
The registration and login system with firebase works fine, but the database is not written
Any help?
It seems you are using the new version of firebase auth. The currentUser property doesnt return a Future, try the following:
void writeDB() async{
User user = _firebaseAuth.currentUser;
await databaseReference.child('user').set({
'email': FirebaseAuth.instance.currentUser.email,
'name': "",
'nick': "",
"score": "0"
});
}

how to get token from firebase auth

I need to get token from firebase when i do auth and then transfer token to backend.I have several cases auth.I have not worked with token yet.What should i do for next step?
final FirebaseAuth _firebaseAuth = FirebaseAuth.instance;
Future<FirebaseUser> getCurrentUser() => _firebaseAuth.currentUser();
Future<AuthResult> signInWithGoogle() async {
final authentication = await GoogleAuth().signIn();
final credential = GoogleAuthProvider.getCredential(
accessToken: authentication.accessToken,
idToken: authentication.idToken,
);
return _firebaseAuth.signInWithCredential(credential);
}
Future<AuthResult> signInWithEmail(String email, String password) {
return _firebaseAuth.signInWithEmailAndPassword(
email: email,
password: password,
);
}
Are you looking for something like this?
final UserCredential authResult = await _firebaseAuth.signInWithCredential(credential);
final token = authResult.credential.token;

Wait for the Bloc to finish in Flutter

Future<void> loginWithEmail(
String email,
String password,
) async {
await FirebaseAuth.instance.signInWithEmailAndPassword(email: email, password: password);
final data = await request('fetch-user');
final user = UserV1.fromJson(data);
userBloc.add(UpdateUserAction(user));
fetchAllLogs();
requestPushNotifications();
resetMuscleFreshnessOnLogin();
await fetchUserLights([user.uid]);
await fetchExercises();
// Must be after fetch exercises
generateNextWorkout();
return;
}
In the following code I need to wait for the userBloc to finish. But not sure how to do this. Using the FlutterBloc lib.
It would be nice if I could do
await userBloc.add(UpdateUserAction(user));
The suction is simple.
await userBloc.first;