Flutter firestore'da .data [] kullanılırken "" [] "operatörü tanımlanmadı" hatası
Net Ninja'nın youtube'daki eğitiminden sonra flutter'da firestore'u kullanmayı öğreniyorum. Kullanıcı kimlik doğrulaması yapıldıktan sonra, bu adam yeni bir kullanıcı oluşturulduğunda veritabanına kullanıcı kayıtlarını ekledi, bunu yapmak için "name" adlı 1 String geçerek yeni bir model eklendi ve onu çağırdığımı anladığımdan modeli eşledi ve sonra kullandı .data ['name'] bu dizeyi modelden (dizge adı olarak adlandırıldı) almak için ve bunu yaparken, The operator '[]' isn't defined for the type 'Map<String, dynamic> Function()'neden bu hatayı alıyorum?
kullanıcı adı modeli
class Username {
final String name;
Username({ this.name });
}
databse.dart dosyası (aşağıdaki kod, DatabaseService adlı bir sınıfa sarılır)
List<Username> _usernameListFromSnapshot(QuerySnapshot snapshot) {
return snapshot.docs.map((doc){
return Username(
name: doc.data['name'] ?? '',
);
}).toList();
}
auth.dart
Future registerWithEmailAndPassword(String email, String password) async {
try {
UserCredential result = await _auth.createUserWithEmailAndPassword(email: email, password: password);
User user = result.user;
// create a new document for the user with uid
await DatabaseService(uid: user.uid).updateUserData('user123');
return _userFromFirebaseUser(user);
} catch(e) {
print(e.toString());
return null;
}
}
Herhangi bir sorunuz varsa veya daha fazla kod görmeniz gerekiyorsa, lütfen yorumlarda bana bildirin
Yanıtlar
Bunu değiştir:
name: doc.data['name'] ?? ''
Bunun içine:
name: doc.data()['name'] ?? ''
data()şimdi bir yöntemdir, bu nedenle ()kaynak kodundan eklemeniz gerekir :
Map<String, dynamic> data() {
return _CodecUtility.replaceDelegatesWithValueInMap(
_delegate.data(), _firestore);
}
Firestore , öğesinin bir dataözelliğiydi QueryDocumentSnapshot, ancak şimdi bir işlev data().
Ve hata mesajından da anlaşılacağı gibi, uğraştığınız şey aslında bir Map<String, dynamic> Function(), yani bir harita döndüren bir işlevdir.
Bu nedenle, işlevi çağırmak için boş parantez ekleyin data:
doc.data()['name']