我已经尝试了几天,但是我真的没有什么好主意了。可以在这里找到代码:https://github.com/Sileadim/provider_test
这是我要做什么的解释:
到目前为止我所做的:
context.watch<NodeStates>.nodes
为每个节点创建一个Node小部件。该小部件为抽象节点信息提供主体和一些动画。类似地,我布置按钮。context.watch<NodeStates>.addChild(widget.node)
之类的提供者方法,该方法在最后调用notifyListeners()
。看到这里:https://github.com/Sileadim/provider_test/blob/master/lib/main.dart build()
方法会触发动画控制器,并返回包装在例如GestureDetector
,取决于传递给窗口小部件的节点是否处于活动状态如果正确,我现在不知道。 SlideAnimation
都会触发重建
整个视图context.watch<NodeStates>.matrix
时,也会触发整个视图的重建。问题:
context.watch<NodeStates>.nodes
添加节点会重新触发整个节点,按钮等视图的构建,但是
从未调用此新节点的小部件的context.watch<NodeStates>.nodes
,因此未设置animationController。看来它是从其他小部件中获取的,而我不知道如何以及为什么?也不会再次调用已经存在的节点的initState()
,只有initState()
build()
和initState()
,这会触发幻灯片动画再次显示该按钮。谢谢。