Saya mengambil ID pengguna saya ketika pengguna masuk, dan menyimpannya di Preferensi Bersama di Halaman Masuk saya, seperti itu

 Future<FirebaseUser> _register() async {

// ... Firebase Login Code

SharedPreferences prefs = await SharedPreferences.getInstance();
 if (user != null) {
          // Check is already sign up
          final QuerySnapshot result = await Firestore.instance
              .collection('users')
              .where('id', isEqualTo: user.uid)
              .getDocuments();
          final List<DocumentSnapshot> documents = result.documents;
          if (documents.length == 0) {
            // Update data to server if new user
            Firestore.instance.collection('users').document(user.uid).setData({
              'id': user.uid,
              'name': user.displayName
            });
            currentUser = user;
            await prefs.setString('id', currentUser.uid);
            await prefs.setString('name', currentUser.displayName);
          } else {
            await prefs.setString('id', documents[0]['id']);
            await prefs.setString('name', documents[0], ['name']);
          }
        }

}

Saya kemudian meneruskan pengguna ke layar beranda saya, jika pengguna tidak nol, setelah pengguna memasuki beranda, ID pengguna yang diterima oleh preferensi bersama adalah nol, saya mengambil ID pengguna dari initState()

void initState() {
fetchName();
}

fetchName() async {
      SharedPreferences prefs = await SharedPreferences.getInstance();
      userTestName = prefs.getString('name') ?? '';
    id = prefs.getString('id') ?? '';

    }

Masalah #1 Setelah saya menutup aplikasi & memulai ulang, ID pengguna saya diambil dan saya dapat menampilkan nama pengguna saya namun saya tidak dapat mencapainya saat pertama kali pengguna masuk ke aplikasi.

Masalah #2 Jika saya logout pengguna saya, dan login kembali pengguna di ID yang disimpan di preferensi bersama masih merupakan nilai sebelumnya yang ketika login, memanggil ID pengguna lama dan kemudian ketika aplikasi diluncurkan kembali mengambil ID pengguna baru.

Saya mencoba mencari di halaman Stack Overflow lainnya tetapi saya masih cukup bingung & baru mengenal Flutter!

0
Simran Aswani 16 Desember 2019, 21:32

1 menjawab

Jawaban Terbaik

Mengapa menggunakan SharedPreferences saat bekerja dengan Firebase ?? saat Anda dapat langsung mengakses detail pengguna yang masuk dari objek FirebaseAuth saat aplikasi Anda dimulai.

    FirebaseUser loggedUser;
    checkLoggedIn() {
        FirebaseAuth.instance.currentUser().then((FirebaseUser user) {
          if (user != null ) {
             loggedUser = user;
             setState(() {});
             // all these values may or may not be null that depends if the user's 
             // login provider has got these details from user or not
             //user.providerId;// access the logged in userId
             //user.displayName;// access logged in user Name
             //user.email;// access logged in user email
             //user.phoneNumber;// access logged in user contact number 
          }
        });
      }

Panggil metode checkLoggedIn() di dalam initState() fungsi widget stateful

@override
  void initState() {
    super.initState();
    checkLoggedIn();
  }
1
Aman Malhotra 16 Desember 2019, 21:00