Ошибка диапазона (индекс): Недопустимое значение: Не входит в диапазон 0..2: 3

#flutter

Вопрос:

Я пытаюсь удалить фотографии из списка в flutter, выбираю случайным образом. Без указания местоположения изображения и я получаю следующую ошибку:

 RangeError (index): Invalid value: Not in inclusive range 0..2: 3

 

Я не постоянно ошибаюсь, иногда ошибаюсь, а иногда нет. В зависимости от выбора местоположения фотографий.Фотографии удаляются из базы данных.

Вот код, который я использовал:

 
      child: ListView.builder(
                                                    itemCount: filteredUsers.length,
                                                    scrollDirection: Axis.horizontal,
                                                    itemBuilder: (BuildContextcontext, int index) {
                                                      return InkWell(
                                                        child: Padding(
                                                            padding: EdgeInsets.only(top: 8.0, bottom: 8.0, left: 8.0, right: 8.0),
                                                            child:
                                                            Container(
                                                                height: 140, width: 140,
                                                                child:
                                                                ClipRRect(
                                                                  borderRadius:
                                                                  BorderRadius.circular(8),
                                                                  child:
                                                                  AspectRatio(
                                                                    aspectRatio:
                                                                    1.2,
                                                                    child:
                                                                    Image.network(
                                                                      filteredUsers[index].ImageURL.toString(),
                                                                      width: double.infinity,
                                                                      height: 400,
                                                                      fit: BoxFit.cover,
                                                                    ),

                                                                  ),
                                                                ))),

                                                          onTap: () {
                                                            showDialog(
                                                              context: context,
                                                              builder: (ctx) => AlertDialog(
                                                                //   title: Text("Alert Dialog Box"),
                                                                content: Text("delete..?".tr()),
                                                                actions: <Widget>[
                                                                  TextButton(
                                                                    onPressed: () {
                                                                      setState(
                                                                              () {
                                                                            filteredUsers
                                                                                .removeAt(
                                                                                index);
                                                                            deleteImage(filteredUsers[index].id);
                                                                            Navigator.of(ctx).pop();

                                                                          });

                                                                    },

                                                                    child: Text("OKdelete".tr()),
                                                                  ),
                                                                  TextButton(
                                                                    onPressed: () {
                                                                      Navigator.of(ctx).pop();
                                                                    },

                                                                    child: Text("Closes".tr()),
                                                                  ),
                                                                ],
                                                              ),
                                                            );



                                                          }
                                                      );
                                                    },
                                                  ),

 
   void deleteImage(id) {
    var url = "https://***************deleteImage.php";
    http.post(Uri.parse(url), body: {
      'id': id.toString(),
    })

 

Ответ №1:

Это происходит потому, что вы сначала удаляете, а затем снова обращаетесь к нему, делая это

 filteredUsers.removeAt(index);
deleteImage(filteredUsers[index].id);
 

Но к моменту завершения первого оператора filteredUsers[index] значение будет равно нулю, и тогда вы не сможете получить доступ null.id .

Измените свой код на этот,

 var id = filteredUsers[index].id;      // First get the id from the item
filteredUsers.removeAt(index);         // Then you can delete it
deleteImage(id);                       // Use the new id variable you just created