Flutter firestore'da .data [] kullanılırken "" [] "operatörü tanımlanmadı" hatası

Aug 22 2020

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

35 PeterHaddad Aug 22 2020 at 03:27

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);
  }

https://github.com/FirebaseExtended/flutterfire/blob/master/packages/cloud_firestore/cloud_firestore/lib/src/document_snapshot.dart#L38

4 AnisR. Sep 03 2020 at 19:01

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']