Flutter Redux会调度不存在的操作(flutter / flutter_redux BUG?)

时间:2019-01-26 11:12:25

标签: debugging redux dart flutter

我一直在尝试将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>

  • 触发的RemoveTaskAction包含紧接其自身之前的任务的ID。
  • 如果尝试删除紧随已删除任务之后的任务,则此RemoveTaskAction将包含已删除任务的ID。
  • 由于删除的任务/标识在小部件树中不存在,因此这不可能。

据我确定,此行为是Flutter或Redux中的错误。如果有人指出我缺少或做错了什么,请做!

Source code(Github存储库)

Debug screenshots编辑:固定屏幕截图排序。注意:第一个映像是应用程序,其余映像是IDE。

0 个答案:

没有答案