用Flutter中的新小部件替换已解散的小部件

时间:2019-01-30 01:10:42

标签: dart flutter

我的Dismissable小部件的当前实现出现错误。它返回“确保实现onDismissed处理程序并立即删除Dismissable小部件”错误。该错误对我来说很有意义,但我正在尝试重置小部件的状态。我不知道如何设置onDismissed属性返回新卡。我正在使用卡片上的Dismissable小部件。而且,我希望能够解散该卡,并自动将其更换为新卡。可丢弃的小部件甚至是我应该采用的适当路线吗?谢谢。

1 个答案:

答案 0 :(得分:0)

如果要包括代码(根据需要进行配对),则很可能更容易看到正在发生的事情。在以后的问题中,请提供示例,因为它将帮助我们=)。

话虽如此,您似乎对如何使用Dismissable小部件有些困惑。基本上,它将显示其子级并将处理撤消手势,但是您有责任将其从列表中删除(假设此列表位于列表中)。从Dismissable documentation:

  

如果“ Dismissible”是一个列表项,则必须具有一个用于   区别于其他项目及其onDismissed回调   必须从列表中删除该项目。

这就是说,如果Dismissable位于列表中,则必须从外部管理列表及其中项目的状态。如果Dismissable不在列表中,我也不会感到惊讶。

基本上,您应该在该回调中执行一些操作,以从列表中删除Dismissable及其子级。发生这种情况的最可能的方法是,将Dismissable及其包含的列表构建在继承State的类中。

例如,您有一个存储为State成员变量的项目列表:1,2,3,4,5,6,7,8,9,10。如果您取消了8,则应该从列表1,2,3,4,5,6,7,9,10中进行构建。如果您只是从列表中删除第8个项目,则由于dart不够灵巧,无法比较列表项目,因此无法正常工作-它仍将列表视为相同的列表。因此,您可以复制不带8的列表并将其设置为该成员,或者使用第二个变量(类似count),只要发生变化,该变量就会递增,以使flutter知道重建状态。

现在,您正在做的事情甚至比这还要复杂-您想用其他东西代替它。然后,我建议您做的是更改(或复制)列表形式1,2,3,4,5,6,7,8,9,10-> 1,2,3,4,5,6,7在OnDismissed回调中使用8 *,9,10,并适当地调用setState,其中8 *是某种对象,表示该列表项已被关闭。

构建列表项时,应考虑将8更改为8 *的事实,并适当地构建新的小部件。