Saya punya masalah karena ketika saya menekan tombol saya harus menghapus userData dari FireStore, selanjutnya saya ingin menghapus user dan pergi ke loginPage. Menghapus userData berfungsi dengan baik dan saya tidak punya documents menurut user ini, masalahnya adalah menghapus user dari FirebaseAuth saya tidak tahu mengapa, tetapi fungsinya FirebaseAuth.instance.currentUser!.delete()) tidak dipanggil setelah .whenComplete(), apalagi Navigator saya berfungsi dengan baik dan membawa saya ke loginPage.

Jadi masalah utamanya adalah bahwa panggilan FirebaseAuth.instance.currentUser!.delete()) dilewati entah mengapa.

Ini tombol saya dengan onPressed function:

CustomButton(
                            width: width * 0.9,
                            icon: Icons.delete,
                            text: 'Delete Account',
                            onPressed: () {
                              _authenticationService
                                  .deleteUserData(type).whenComplete(() => FirebaseAuth
                                      .instance.currentUser!
                                      .delete())
                                  .whenComplete(() => Navigator.pushReplacement(
                                      context,
                                      MaterialPageRoute(
                                          builder: (context) =>
                                              LoginMenuPage())));
                            }),

Dan inilah fungsi deleteUserData() saya:

Future<void> deleteUserData(String type) async {
    final User user = FirebaseAuth.instance.currentUser!;
    final CollectionReference _userCollectionRef =
        FirebaseFirestore.instance.collection('users');
    final CollectionReference _attendantCollectionRef =
        FirebaseFirestore.instance.collection('attendants');
    final CollectionReference _seniorCollectionRef =
        FirebaseFirestore.instance.collection('seniors');
    final CollectionReference _chatUserCollectionRef =
        FirebaseFirestore.instance.collection('chatUsers');
    final CollectionReference _notificationsCollectionRef = FirebaseFirestore
        .instance
        .collection('seniors')
        .doc(user.uid)
        .collection('notifications');
    type == "Attendant"
        ? _userCollectionRef
            .doc(user.uid)
            .delete()
            .whenComplete(() => _attendantCollectionRef.doc(user.uid).delete())
            .whenComplete(() => _chatUserCollectionRef.doc(user.uid).delete())
        : _userCollectionRef
            .doc(user.uid)
            .delete()
            .whenComplete(() {
              _notificationsCollectionRef.doc('hunger').delete();
              _notificationsCollectionRef.doc('thirst').delete();
              _notificationsCollectionRef.doc('sleep').delete();
              _notificationsCollectionRef.doc('toilet').delete();
              _notificationsCollectionRef.doc('mood').delete();
            })
            .whenComplete(() => _seniorCollectionRef.doc(user.uid).delete())
            .whenComplete(() => _chatUserCollectionRef.doc(user.uid).delete());
  }
}
0
Darexad 6 Mei 2021, 12:24

1 menjawab

Jawaban Terbaik

Oh oke saya menemukan solusi, hanya harus membuatnya tidak sinkron. Ini kode dari onPressed call yang berfungsi dengan baik untuk saya:

_authenticationService
                     .deleteUserData(type)
                                  .whenComplete(() async => await FirebaseAuth
                                      .instance.currentUser!
                                      .delete())
                                  .whenComplete(() => Navigator.pushReplacement(
                                      context,
                                      MaterialPageRoute(
                                          builder: (context) =>
                                              LoginMenuPage())));
1
Darexad 6 Mei 2021, 09:29