#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