Flutter动画列表索引问题

时间:2019-01-10 15:34:32

标签: flutter flutter-animation

我正在使用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);
  }

}

0 个答案:

没有答案