Итак, у меня проблема, когда я удаляю элемент из списка, это дает мне ошибку вне допустимого диапазона и сообщает мне, что это происходит при попытке создать представление моей карты
На экране телефона:
RangeError (index): Invalid value: Not in range 0..1, inclusive: 2
В консоли отладки:
════════ Exception caught by widgets library ═══════════════════════════════════
The following RangeError was thrown building ListViewCard-[<'2'>](dirty, state: _ListViewCard#e102b):
RangeError (index): Invalid value: Not in range 0..1, inclusive: 2
The relevant error-causing widget was
ListViewCard-[<'2'>]
package:my_todo_app/main.dart:128
When the exception was thrown, this was the stack
#0 List.[] (dart:core-patch/growable_array.dart:146:60)
#1 _ListViewCard.build
package:my_todo_app/main.dart:64
#2 StatefulElement.build
package:flutter/…/widgets/framework.dart:4619
#3 ComponentElement.performRebuild
package:flutter/…/widgets/framework.dart:4502
#4 StatefulElement.performRebuild
Я не знаю, что я сделал не так, когда я добавляю элемент, список обновляется нормально,
Вот посмотрите на мою игру:
Простой список:
List<Todo> todos = [
Todo("Learn Flutter"),
Todo("Make Todo App List"),
Todo("Search for out of range error"),
];
Карточный вид для моего списка:
class ListViewCard extends StatefulWidget {
final int index;
final Key key;
final List<Todo> todoList;
ListViewCard(this.index, this.key, this.todoList);
@override
_ListViewCard createState() => _ListViewCard();
}
class _ListViewCard extends State<ListViewCard> {
@override
Widget build(BuildContext context) {
return Card(
child: ListTile(
title: Text(widget.todoList[widget.index].text),
trailing: IconButton(
icon: Icon(Icons.delete),
onPressed: () {
setState(() {
todos.removeAt(widget.index);
});
},
),
onTap: () {},
),
);
}
}
Домашняя страница:
class MyHomePage extends StatefulWidget {
MyHomePage({Key key, this.title}) : super(key: key);
final String title;
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text("Todo),
),
body: ReorderableListView(
onReorder: () {},
children: List.generate(todos.length, (index) {
return ListViewCard(index, Key('$index'), todos);
}),
),
floatingActionButton: FloatingActionButton(
onPressed: () {
setState(() {
todos.insert(todos.length, Todo("New Todo"));
});
},
child: Icon(Icons.add),
),
);
}
}