Can you help me? I've only been learning Flutter for a few months and I want to get user data from Firebase and display the user profile. But it doesn't work, this is my code:
DatabaseReference _ref;
var email, nama, noTelp;
@override
void initState() {
// TODO: implement initState
super.initState();
final User usernya = _auth.currentUser;
final String uid = usernya.uid;
_ref = FirebaseDatabase.instance.reference().child('user').child(uid);
email = _ref.child('email');
nama = _ref.child('nama');
noTelp = _ref.child('noTelp');
}
And this code for user profiles:
Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
_ref == null
? Text(
'Nama Pengguna',
style: TextStyle(
fontSize: 18,
fontWeight: FontWeight.bold,
color: Colors.white),
)
: Text(
nama.toString(),
style: TextStyle(
fontSize: 18,
fontWeight: FontWeight.bold,
color: Colors.white),
),
Text(
email.toString(),
style: (TextStyle(color: Colors.white)),
),
Text(noTelp.toString(),
style: (TextStyle(color: Colors.white)))
],
)
And I get output like this instance of 'Database Reference'
This is my user data in firebase:
And I got output like this:
You should call Firestore method get()
to fetch data, then read the returned document from the callback.
FirebaseDatabase.instance.reference().child('user').child(uid).get().then((docSnapshot) {
print(docSnapshot.data()["email"]); // print data to test
});
Please find references here
It should look like that (with cloud firestore):
// collection reference
final CollectionReference _userCollection =
Firestore.instance.collection('users');
Future getUser(String uid) async {
return await _userCollection.document(uid).snapshots().map((doc) {
_userDataFromSnapshot(doc);
});
}
// userData from snapshot
UserData _userDataFromSnapshot(DocumentSnapshot snapshot) {
return UserData(
uid: uid,
nickname: snapshot.data['nickname'],
);
}
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.