Issue
i have this function
UserData _userDataFromSnapshot(DocumentSnapshot snapshot) {
return UserData(
uid: uid,
userName: snapshot.data()['userName'],
userEmail: snapshot.data['userEmail'],
phoneNumber: snapshot.data['phoneNb']
);
}
but im getting error on the paranthesis
The operator '[]' isn't defined for the type 'Object'.
updateee for the question
also i have the function and instance of collection
final CollectionReference users = FirebaseFirestore.instance.collection('users');
// get user doc stream
Stream<UserData> get userData {
return users.doc(uid).snapshots()
.map(_userDataFromSnapshot);
}
when i read data:
Widget profile(context, user){
return StreamBuilder<UserData>(
stream: DatabaseService(uid: user.uid).userData,
builder: (context, snapshot) {
if(snapshot.hasData){
UserData userData = snapshot.data;
print(userData.userName);
} else print('no data');
}
);
}
what can i do?
im using versions:
Flutter 2.0.1 • channel stable • https://github.com/flutter/flutter.git
Framework • revision c5a4b4029c (1 year, 1 month ago) • 2021-03-04 09:47:48 -0800
Engine • revision 40441def69
Tools • Dart 2.12.0
Solution
You are approaching to the data in two different ways. One of them (which is the first one) is correct but the other ways are wrong. Once you have the document snapshot, get the data out of it and use it as an assigning mechanism.
You can try the code below.
For more information –> https://firebase.flutter.dev/docs/firestore/usage/
UserData _userDataFromSnapshot(DocumentSnapshot document) {
final data = document.data()! as Map<String, dynamic>;
return UserData(
uid: uid,
userName: data['userName'],
userEmail: data['userEmail'],
phoneNumber: data['phoneNb']
);
}
Answered By – salihgueler
Answer Checked By – David Marino (FlutterFixes Volunteer)