Search code examples
flutterdartstream-builder

The getter 'documents' was called on null


I'm using flutter and firebase to make a to-do list. It keeps showing me this error even after I checked if my snap.data == null .But I am not sure why still doesn't work.

please help. I have checked similar problems like this but still didn't solve sorry for my English

 body: StreamBuilder(
 
      stream: Firestore.instance.collection("MyTodos").snapshots(),
      builder: (context, snapshots) {
        return ListView.builder(
   
          shrinkWrap: true,
          itemCount: snapshots.data.documents.length,
          itemBuilder: (context, index) {
            DocumentSnapshot documentSnapshot =
                snapshots.data.documents[index];
            return Dismissible(
              key: Key(index.toString()),
              child: Card(
                child: ListTile(
                  title: Text(documentSnapshot["todoTitle"]),
                  trailing: IconButton(
                    icon: Icon(Icons.delete),
                    onPressed: () {
                      setState(() {
                        todos.removeAt(index);
                      });
                    },
                  ),
                ),
              ),
            );
          },
        );
      },
    )

Solution

  • StreamBuilder has a default state before it gets any data at all, and you need to check for this state so you don't try to build using data that doesn't exist yet. You can do this by checking either snapshots.hasData or snapshots.data == null:

    StreamBuilder(
      ...
      builder: (context, snapshots) {
        if (!snapshots.hasData) {
          return CircularProgressIndicator();
        }
        else {
          return ListView.builder(
            ...
          );
        }
      },
    ),