Adeel Nazim
Adeel Nazim

Reputation: 724

The operator '[]' isn't defined for the class 'Object'. flutter

I'm trying to get data from the firebase database. I'm getting this error:

The operator '[]' isn't defined for the class 'Object'

Try many methods but the error is still here.

StreamBuilder<QuerySnapshot>(
            stream: _categoryProvider.category.snapshots(),
              builder: (BuildContext context, AsyncSnapshot<QuerySnapshot> snapshot){
              if(snapshot.hasError){
                return Text('Something went wrong..');
              }
              if(snapshot.connectionState == ConnectionState.waiting){
                return Center(child: CircularProgressIndicator(),);
              }
              return Expanded(
                child: ListView(
                  children: snapshot.data.docs.map((DocumentSnapshot document){
                      return ListTile(
                        leading: CircleAvatar(
                          backgroundImage: NetworkImage(document?.data()['image']),// error is on this line
                        ),
                        //title: Text(document.data()['category name']),
                        onTap: (){},
                      );
                    }).toList(),
                ),
              );
              }),

Here is CategoryProvider.

import 'package:cloud_firestore/cloud_firestore.dart';

class CategoryProvider{
  CollectionReference category = FirebaseFirestore.instance.collection('categories');
}

Upvotes: 1

Views: 265

Answers (2)

Stewie Griffin
Stewie Griffin

Reputation: 5608

I guess you confused QueryDocumentSnapshot with DocumentSnapshot. This is because there are two different snapshots() methods (one from the Query class and one from the DocumentReference class).

Change this:

children: snapshot.data.docs.map((DocumentSnapshot document){

to this:

children: snapshot.data.docs.map((QueryDocumentSnapshot document) {

Upvotes: 1

Abbasihsn
Abbasihsn

Reputation: 2171

use this instead:

final temp = document.data; // once try this and if it did not work use json.decode(document.data)
return Expanded(
                child: ListView(
                  children: snapshot.data.docs.map((DocumentSnapshot document){
                      return ListTile(
                        leading: CircleAvatar(
                          backgroundImage: NetworkImage(temp['image']),// error is on this line
                        ),
                        //title: Text(temp['category name']),
                        onTap: (){},
                      );
                    }).toList(),
                ),

let me know the result.

Upvotes: 0

Related Questions