我正在使用Flutter制作动画列表,您可以在其中单击列表中的项目将其删除。有时,错误的项目会从列表中删除。您可以在this video的末尾观察到所描述的行为。似乎我在用正确的索引重建它之前,单击了动画列表中的项目。因此,我要在该位置单击具有前一个索引的项目。 例如,我单击索引0处的项目,然后在重建列表项之前,单击在之前完成替换已删除项目的动画的项目。因此,我要单击索引为1的项目,但实际上现在显示在索引为0的地方。
我尝试了一些操作,例如跟踪当前是否删除了某项。可悲的是,没有成功。
现在我的问题是:是否有人对如何解决此问题有任何了解?
可以找到我的代码here。
class TodoItemWidget extends StatelessWidget {
TodoItemWidget(this.item, this.listKey, this.index, {this.clickable = true});
final GlobalKey<TodoItemListWidgetState> listKey;
final TodoItem item;
final int index;
final bool clickable;
void complete() {
//int index = listKey.currentState.list.indexOf(item);
listKey.currentState.removeItem(index);
}
@override
Widget build(BuildContext context) {
bool deadlinePassed = DateTime.now().isAfter(item.deadline);
Color backgroundColor = deadlinePassed ? Colors.red : null;
Color textColor = deadlinePassed ? Colors.white : Colors.black;
return Column(
children: <Widget>[
Material(
color: backgroundColor,
child: Padding(
padding: EdgeInsets.symmetric(horizontal: 32.0),
child: Row(
children: <Widget>[
Expanded(
child: Padding(
padding: EdgeInsets.symmetric(vertical: 16.0),
child: Text(item.title, style: Theme.of(context).textTheme.title.copyWith(color: textColor)),
),
),
SizedBox(width: 16),
Padding(
padding: EdgeInsets.only(top: 4.0, bottom: 12.0),
child: Column(
children: <Widget>[
IconButton(
onPressed: clickable ? complete : null,
icon: Icon(Icons.check),
color: textColor,
),
Text(_getDateString(item.deadline), style: Theme.of(context).textTheme.body1.copyWith(fontSize: 12.0, color: textColor),),
],
),
),
],
),
),
),
SizedBox(height: 1.0),
],
);
}
String _getDateString(DateTime date) {
return DateFormat("dd.MM.yyyy").format(date);
}
}