#flutter #google-cloud-firestore
#flutter #google-cloud-firestore
Вопрос:
Я новичок в flutter, я получаю ошибку при сохранении данных firestore в локальном хранилище с помощью общих настроек, я изо всех сил старался решить эту ошибку, но не нашел никакого решения, пожалуйста, заранее спасибо за помощь, я получаю ошибку в том, что другая часть кодового имени ошибки — оператор ‘[]’ не определен для типа ‘DocumentSnapshot’
GoogleSignInAccount googleUser = await googleSignIn.signIn();
GoogleSignInAuthentication googleAuth = await googleUser.authentication;
final AuthCredential credential = GoogleAuthProvider.getCredential(
accessToken: googleAuth.accessToken,
idToken: googleAuth.idToken,
);
FirebaseUser firebaseUser = (await firebaseAuth.signInWithCredential(credential)).user;
if (firebaseUser != null) {
// Check is already sign up
final QuerySnapshot result =
await Firestore.instance.collection('users').where('id', isEqualTo:
firebaseUser.uid).get();
final List<DocumentSnapshot> documents = result.docs;
if (documents.length == 0) {
// Update data to server if new user
Firestore.instance.collection('users').document(firebaseUser.uid).setData({
'name': firebaseUser.displayName,
'photoUrl': firebaseUser.photoURL,
'id': firebaseUser.uid,
'createdAt': DateTime.now().millisecondsSinceEpoch.toString(),
'chattingWith': null
});
// Write data to local
currentUser = firebaseUser;
await prefs.setString('id', currentUser.uid);
await prefs.setString('nickname', currentUser.displayName);
await prefs.setString('photoUrl', currentUser.photoUrl);
} else {
// Write data to local
await prefs.setString('id', documents[0]['id']);
await prefs.setString('nickname', documents[0]['nickname']);
await prefs.setString('photoUrl', documents[0]['photoUrl']);
await prefs.setString('aboutMe', documents[0]['aboutMe']);
}
Ответ №1:
Вам нужно перебирать документы, чтобы сохранить данные каждого документа, и вам нужно использовать document.данные :
GoogleSignInAccount googleUser = await googleSignIn.signIn();
GoogleSignInAuthentication googleAuth = await googleUser.authentication;
final AuthCredential credential = GoogleAuthProvider.getCredential(
accessToken: googleAuth.accessToken,
idToken: googleAuth.idToken,
);
FirebaseUser firebaseUser = (await firebaseAuth.signInWithCredential(credential)).user;
if (firebaseUser != null) {
// Check is already sign up
final QuerySnapshot result =
await Firestore.instance.collection('users').where('id', isEqualTo:
firebaseUser.uid).get();
final List<DocumentSnapshot> documents = result.docs;
if (documents.length == 0) {
// Update data to server if new user
Firestore.instance.collection('users').document(firebaseUser.uid).setData({
'name': firebaseUser.displayName,
'photoUrl': firebaseUser.photoURL,
'id': firebaseUser.uid,
'createdAt': DateTime.now().millisecondsSinceEpoch.toString(),
'chattingWith': null
});
// Write data to local
currentUser = firebaseUser;
await prefs.setString('id', currentUser.uid);
await prefs.setString('nickname', currentUser.displayName);
await prefs.setString('photoUrl', currentUser.photoUrl);
} else {
// Write data to local
documents.forEach((DocumentSnapshot document){
Map<String,dynamic> documentData = document.data();
await prefs.setString('id', documentData['id']);
await prefs.setString('nickname', documentData['nickname']);
await prefs.setString('photoUrl', documentData['photoUrl']);
await prefs.setString('aboutMe', documentData['aboutMe']);
});
}