diff --git a/lib/screens/auth/views/sign_up_screen.dart b/lib/screens/auth/views/sign_up_screen.dart index 70c9b31..16bd54c 100644 --- a/lib/screens/auth/views/sign_up_screen.dart +++ b/lib/screens/auth/views/sign_up_screen.dart @@ -36,12 +36,22 @@ class _SignUpScreenState extends State { setState(() { signUpRequired = false; }); + // User sudah terdaftar dan auth state akan otomatis update via AuthenticationBloc + // Tungur sebentar agar Firestore selesai menyimpan data + ScaffoldMessenger.of(context).showSnackBar( + const SnackBar(content: Text('Registrasi berhasil! Mengarahkan...')), + ); } else if (state is SignUpProcess) { setState(() { signUpRequired = true; }); } else if (state is SignUpFailure) { - return; + setState(() { + signUpRequired = false; + }); + ScaffoldMessenger.of(context).showSnackBar( + const SnackBar(content: Text('Registrasi gagal, silakan coba lagi')), + ); } }, child: Form( diff --git a/packages/user_repository/lib/src/firebase_user_repo.dart b/packages/user_repository/lib/src/firebase_user_repo.dart index 6616966..e27ae9b 100644 --- a/packages/user_repository/lib/src/firebase_user_repo.dart +++ b/packages/user_repository/lib/src/firebase_user_repo.dart @@ -18,8 +18,24 @@ class FirebaseUserRepo implements UserRepository { if (firebaseUser == null) { yield MyUser.empty; } else { - yield await userCollection.doc(firebaseUser.uid).get() - .then((value) => MyUser.fromEntity(MyUserEntity.fromDocument(value.data()!))); + try { + final userData = await userCollection.doc(firebaseUser.uid).get(); + if (userData.exists && userData.data() != null) { + yield MyUser.fromEntity(MyUserEntity.fromDocument(userData.data()!)); + } else { + // User baru yang belum ada data di Firestore, tunggu sebentar + await Future.delayed(const Duration(milliseconds: 500)); + final retryData = await userCollection.doc(firebaseUser.uid).get(); + if (retryData.exists && retryData.data() != null) { + yield MyUser.fromEntity(MyUserEntity.fromDocument(retryData.data()!)); + } else { + yield MyUser.empty; + } + } + } catch (e) { + log('Error fetching user data: $e'); + yield MyUser.empty; + } } }); } @@ -63,6 +79,8 @@ class FirebaseUserRepo implements UserRepository { await userCollection .doc(myUser.userId) .set(myUser.toEntity().toDocument()); + // Tunggu sebentar agar data tersimpan dengan baik sebelum stream update + await Future.delayed(const Duration(milliseconds: 500)); } catch (e) { log(e.toString()); rethrow;