0
votes

I'm making a to-do list with Flutter and Firebase Firestore, but I have a slight problem. Whenever I add a new task, snapshot.data becomes null. If I do not add a check for snapshot.connectionState and render a different widget according to that, I get the following error: NoSuchMethodError (NoSuchMethodError: The getter 'docs' was called on null.

return StreamBuilder(
      stream: FirebaseFirestore.instance
          .collection('tasks')
          .doc(widget.uid)
          .collection('mytasks')
          .snapshots(),
      builder: (context, snapshot) {
        if (snapshot.connectionState == ConnectionState.waiting) {
          return const Center(
            child: SizedBox(
                height: 100, width: 100, child: CircularProgressIndicator()),
          );
        } else {
>         final docs = snapshot.data.docs;
          return ListView.builder(
            itemCount: docs.length,
            itemBuilder: (ctx, index) {
              final currTask = docs[index];
              return Dismissible(
                direction: DismissDirection.startToEnd,
                key: UniqueKey(),
                onDismissed: (_) async {
                  FirebaseFirestore.instance
                      .collection('tasks')
                      .doc(widget.uid)
                      .collection('mytasks')
                      .doc(currTask['id'])
                      .delete();
.
.
.

I don't want to have to display a CircularProgressIndicator or an empty screen. I want the tasks to remain visible and seamlessly add new tasks. How can I achieve that? I know what I asked for in the question title might be a little silly, what should I do instead?