我一直在尝试将flutter的待办事项列表应用程序转换为使用flutter的Redux库进行状态管理。
我有一个StoreConnector,它包装了一个ListView,用于监视Task对象的List。当然,添加和删除任务是通过reducer完成的,reduce会创建一个新列表,并在列表中添加或删除任务。
添加到列表可以正常工作,并且第一次删除始终可以正常工作。始终删除最后一个(底部)项目也将始终有效,直到删除底部以上的项目为止。
但是,删除列表底部上方的任何项目时,删除的第一个项目都会正确删除,但是此后,删除项目下面的每个项目都需要单击删除按钮两次才能删除任务。
对应用程序进行调试后,显示第一次在给定任务上(除特殊情况外)按下删除按钮,删除操作包含一个与列表中紧接其上方任务相对应的任务ID。因此,列表中最上面的任务包含刚刚删除的任务的ID。
进一步的调试显示,在第一次删除(有效的删除)期间,将使用所有包含正确任务/ id的所有新窗口小部件重新生成窗口小部件树。这意味着所有:
TaskView
具有正确的任务/标识(TaskCard的redux容器小部件)TaskCard
具有正确的任务/标识(无状态小部件包含RemoveTaskButton)RemoveTaskButton
具有正确的任务/标识(redux容器具有removeTask回调)RemoveTaskAction
具有正确的任务/ ID (redux操作)AppState
包含不包含已删除任务的窗口小部件列表。尽管所有小部件/动作/数据类仅包含删除后剩余的任务/标识,但第一次在成功删除后立即按下删除按钮:< / p>
据我确定,此行为是Flutter或Redux中的错误。如果有人指出我缺少或做错了什么,请做!
Source code(Github存储库)
Debug screenshots编辑:固定屏幕截图排序。注意:第一个映像是应用程序,其余映像是IDE。