Home > Blockchain >  AnimatedList out of range when StreamBuilder refreshes
AnimatedList out of range when StreamBuilder refreshes

Time:01-16

StreamBuilder(
          stream: users.where("invites", arrayContains: uid).snapshots(),
          builder: (BuildContext context, AsyncSnapshot<QuerySnapshot> snapshot) {
            if (snapshot.hasData) {
              _items = snapshot.data!.docs;
              return AnimatedList(
                key: listKey,
                initialItemCount: _items.length,
                itemBuilder: (context, index, animation) {
                  return _buildItem(index, _items[index], animation);
                },
              );
            } else {
              return Column(
                crossAxisAlignment: CrossAxisAlignment.center,
                mainAxisAlignment: MainAxisAlignment.center,
                children: const [
                  Center(
                    child: SizedBox(
                        height: 50,
                        width: 50,
                        child: CupertinoActivityIndicator()),
                  ),
                ],
              );
            }
          },
        )

I got this StreamBuilder with a stream from FirebaseFirestore. E.g. I have 3 entries in Firebase which match my condition (saved in _items). So far, so good. But if I delete one of those, the stream refreshes but the list throw an error: RangeError (index): Invalid value: Not in inclusive range 0..1: 2 Other way round same problem: Only two are shown and the third is not shown. Does anyone have an idea why or how to fix this. Thanks :)

CodePudding user response:

This does not work with Animated List because your index is decreasing. You need to build a new Animated List or I would recommend to use a normal list view.

  •  Tags:  
  • Related