before rediense
This commit is contained in:
@@ -19,7 +19,14 @@ class FirebaseUserRepository implements UserRepository {
|
||||
FirebaseUserRepository(this._firebaseAuth) {
|
||||
_firebaseAuth.userChanges().listen((user) async {
|
||||
if (user != null) {
|
||||
await updateFromFirebase(user.uid);
|
||||
await updateFromFirebase2(
|
||||
userId: user.uid,
|
||||
email: user.email,
|
||||
name: user.displayName,
|
||||
phone: user.phoneNumber,
|
||||
picture: user.photoURL,
|
||||
nickname: user.displayName?.trim().toLowerCase(),
|
||||
);
|
||||
} else {
|
||||
_userStreamController.add(null);
|
||||
}
|
||||
@@ -27,17 +34,35 @@ class FirebaseUserRepository implements UserRepository {
|
||||
}
|
||||
|
||||
Future<void> updateFromFirebase(String userId) async {
|
||||
return updateFromFirebase2(userId: userId);
|
||||
}
|
||||
|
||||
Future<void> updateFromFirebase2({
|
||||
required String userId,
|
||||
String? email,
|
||||
String? name,
|
||||
String? phone,
|
||||
String? picture,
|
||||
String? nickname,
|
||||
}) async {
|
||||
try {
|
||||
final myUser = await getMyUser(userId);
|
||||
var myUser = await getMyUser(userId);
|
||||
|
||||
if (myUser == null) {
|
||||
await createUser(MyUser(
|
||||
id: userId,
|
||||
email: email,
|
||||
name: name,
|
||||
phone: phone,
|
||||
picture: picture,
|
||||
nickname: name?.trim().toLowerCase(),
|
||||
));
|
||||
myUser = await getMyUser(userId);
|
||||
}
|
||||
_userStreamController.add(myUser);
|
||||
} catch (e) {
|
||||
try {
|
||||
await createUser(userId);
|
||||
final myUser = await getMyUser(userId);
|
||||
_userStreamController.add(myUser);
|
||||
} catch (e) {
|
||||
_userStreamController.add(null);
|
||||
}
|
||||
log('xd -- Error updating from firebase ${e.toString()}');
|
||||
_userStreamController.add(null);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -55,12 +80,13 @@ class FirebaseUserRepository implements UserRepository {
|
||||
@override
|
||||
Future<MyUser> signUp(MyUser myUser, String password) async {
|
||||
try {
|
||||
UserCredential user = await _firebaseAuth.createUserWithEmailAndPassword(
|
||||
UserCredential userCredential =
|
||||
await _firebaseAuth.createUserWithEmailAndPassword(
|
||||
email: myUser.email!,
|
||||
password: password,
|
||||
);
|
||||
|
||||
myUser = myUser.copyWith(id: user.user!.uid);
|
||||
myUser = myUser.copyWith(id: userCredential.user!.uid);
|
||||
|
||||
return myUser;
|
||||
} catch (e) {
|
||||
@@ -102,6 +128,14 @@ class FirebaseUserRepository implements UserRepository {
|
||||
var credentials = await _firebaseAuth.signInWithCredential(
|
||||
PhoneAuthProvider.credential(
|
||||
verificationId: verificationId, smsCode: code));
|
||||
|
||||
if (credentials.user == null) {
|
||||
await setUserData(MyUser(
|
||||
id: credentials.user?.uid ?? '',
|
||||
phone: credentials.user?.phoneNumber ?? '',
|
||||
));
|
||||
}
|
||||
|
||||
return credentials.user != null ? true : false;
|
||||
} catch (e) {
|
||||
if (e is FirebaseAuthException) {
|
||||
@@ -165,11 +199,16 @@ class FirebaseUserRepository implements UserRepository {
|
||||
|
||||
// Get user data
|
||||
@override
|
||||
Future<MyUser> getMyUser(String myUserId) async {
|
||||
Future<MyUser?> getMyUser(String myUserId) async {
|
||||
try {
|
||||
return usersCollection.doc(myUserId).get().then((value) {
|
||||
final valueData = value.data();
|
||||
if (valueData == null || valueData.isEmpty || !value.exists) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return MyUser.fromEntity(
|
||||
MyUserEntity.fromDocument(value.data()!),
|
||||
MyUserEntity.fromDocument(valueData),
|
||||
);
|
||||
});
|
||||
} catch (e) {
|
||||
@@ -179,8 +218,22 @@ class FirebaseUserRepository implements UserRepository {
|
||||
}
|
||||
|
||||
@override
|
||||
Future<void> updateUserInfo(String userId, Map<String, dynamic> data) async {
|
||||
Future<void> updateUserInfo(
|
||||
String userId, String? picture, Map<String, dynamic> data) async {
|
||||
try {
|
||||
if (picture != null) {
|
||||
File imageFile = File(picture);
|
||||
Reference firebaseStoreRef =
|
||||
FirebaseStorage.instance.ref().child('$userId/PP/${userId}_lead');
|
||||
|
||||
await firebaseStoreRef.putFile(
|
||||
imageFile,
|
||||
);
|
||||
|
||||
String url = await firebaseStoreRef.getDownloadURL();
|
||||
await usersCollection.doc(userId).update({'picture': url});
|
||||
}
|
||||
|
||||
await usersCollection.doc(userId).update(data);
|
||||
|
||||
await updateFromFirebase(userId);
|
||||
@@ -209,16 +262,9 @@ class FirebaseUserRepository implements UserRepository {
|
||||
}
|
||||
|
||||
@override
|
||||
Future<void> createUser(String userId) async {
|
||||
Future<void> createUser(MyUser myUser) async {
|
||||
try {
|
||||
await usersCollection.doc(userId).set({
|
||||
'id': userId,
|
||||
'name': '',
|
||||
'nickname': '',
|
||||
'email': '',
|
||||
'phone': '',
|
||||
'picture': '',
|
||||
});
|
||||
await usersCollection.doc(myUser.id).set(myUser.toEntity().toDocument());
|
||||
} catch (e) {
|
||||
log(e.toString());
|
||||
}
|
||||
|
||||
@@ -20,11 +20,12 @@ abstract class UserRepository {
|
||||
|
||||
Future<void> setUserData(MyUser user);
|
||||
|
||||
Future<MyUser> getMyUser(String myUserId);
|
||||
Future<MyUser?> getMyUser(String myUserId);
|
||||
|
||||
Future<void> updateUserInfo(String userId, Map<String, dynamic> data);
|
||||
Future<void> updateUserInfo(
|
||||
String userId, String picture, Map<String, dynamic> data);
|
||||
|
||||
Future<String> uploadPicture(String file, String userId);
|
||||
|
||||
Future<void> createUser(String userId);
|
||||
Future<void> createUser(MyUser myUser);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user