질문 제목:
Cloud Firestore를 업데이트한 후: '[]' 연산자가 '객체' 유형에 대해 정의되지 않았습니다. 연산자 '[]'를 정의해 보세요.
질문 내용:
모든 것이 잘 작동했지만 클라우드 Firestore 의존성을 업그레이드했을 때. "'Object' 유형에 대해 '[]' 연산자가 정의되지 않았습니다. "라는 오류가 발생하기 시작했습니다. 이 오류는 모든 4 userData.data()[""] 앞에 오고 있습니다.
class BaseProvider with ChangeNotifier {
//instances of firebase
final FirebaseAuth _auth = FirebaseAuth.instance;
final CollectionReference postsCollection =
FirebaseFirestore.instance.collection("posts");
final CollectionReference userCollection =
FirebaseFirestore.instance.collection("users");
//Creating post
Future addPost(
) async {
DocumentSnapshot userData =
await userCollection.doc(_auth.currentUser.uid).get();
return await postsCollection.doc().set({
"id": _auth.currentUser.uid,
"sellername": userData.data()["name"], //Error
"sellercontact": userData.data()["phone"], //Error
"sellercity": userData.data()["city"], //Error
"sellerstate": userData.data()["state"], //Error
});
}
해결 답변:
cloud_firestore
버전 2.0.0 부터
클래스 DocumentSnapshot
는 이제 일반 매개변수를 사용합니다. 선언:
abstract class DocumentSnapshot<T extends Object?> {
따라서 유형의 추상 메소드를 포함합니다 T
.
T? data();
따라서 다음을 수행해야 합니다.
DocumentSnapshot<Map<String, dynamic>> userData =
await userCollection.doc(_auth.currentUser.uid).get();
return await postsCollection.doc().set({
"id": _auth.currentUser.uid,
"sellername": userData.data()["name"],
"sellercontact": userData.data()["phone"],
"sellercity": userData.data()["city"],
"sellerstate": userData.data()["state"],
});
이제 data()
메소드가 유형이 되고 일반적으로 연산자 Map<String,dynamic>
를 사용하여 데이터에 액세스할 수 있습니다 .[]
또 다른 예:
Query query = FirebaseFirestore.instance.collection("collectionPath");
final Stream<QuerySnapshot<Map<String,dynamic>>> snapshots = query.snapshots();
위의 오류가 발생합니다.
'Stream<QuerySnapshot<Object?>>' 유형의 값은 'Stream<QuerySnapshot<Map<String, dynamic>>>' 유형의 변수에 할당할 수 없습니다.
Query
다음 선언 이 있기 때문에 이 오류가 발생 합니다.
abstract class Query<T extends Object?>
while snapshots()
은 다음을 반환합니다.
Stream<QuerySnapshot<T>> snapshots({bool includeMetadataChanges = false});
Query
및 이후에 유형이 지정되지 않았 T extends Object?
으므로 코드 snapshots()
에서 다음과 같은 반환 유형 Stream<QuerySnapshot<Object?>>
을 가지며 위의 오류가 발생합니다. 따라서 이를 해결하려면 다음을 수행해야 합니다.
Query<Map<String,dynamic>> query = FirebaseFirestore.instance.collection("collectionPath");
final Stream<QuerySnapshot<Map<String,dynamic>>> snapshots = query.snapshots();
문서 에 따르면 :
BREAKING REFACTOR: DocumentReference, CollectionReference, Query, DocumentSnapshot, CollectionSnapshot, QuerySnapshot, QueryDocumentSnapshot, Transaction.get, Transaction.set 및 WriteBatch.set은 이제 추가 일반 매개변수를 사용합니다. (#6015).
따라서 위의 모든 클래스에 대해 구현해야 합니다.
'expert' 카테고리의 다른 글
플러터(Flutter)로 Todo app 만들기 (0) | 2023.01.28 |
---|---|
Flutter/React-Native/Android-Native 앱용 SHA-1 생성 (0) | 2023.01.28 |
오류: iOS에서 flutter를 실행할 때 'Flutter/Flutter.h' 파일을 찾을 수 없습니다. (0) | 2023.01.28 |
POST 요청을 수행하는 동안 Flutter CERTIFICATE_VERIFY_FAILED 오류를 해결하는 방법은 무엇입니까? (0) | 2023.01.28 |
Firebase 앱 '[DEFAULT]'이(가) 생성되지 않았습니다. Flutter 및 Firebase에서 Firebase.initializeApp()을 호출하세요. (0) | 2023.01.28 |
댓글