我必须使用IndexedStack来维护我的BottomNavigationBar的小部件的状态。现在,我想使用AnimatedSwitcher(或其他)在切换选项卡时创建动画。我在更改IndexedStack时触发AnimatedSwitcher时遇到问题。我将IndexedStack作为AnimatedSwitcher的子项,这显然会导致AnimatedSwitcher无法触发,因为IndexedStack小部件不会更改,只是它是子项。
body: AnimatedSwitcher(
duration: Duration(milliseconds: 200),
child: IndexedStack(
children: _tabs.map((t) => t.widget).toList(),
index: _currentIndex,
),
)
字符串
有没有办法解决这个问题?手动触发AnimatedSwitcher,还是使用不同的方法创建动画?我也试着改变键,但这显然导致它每次创建一个新的状态时都会创建一个新的IndexedStack,因此选项卡的状态也丢失了。
7条答案
按热度按时间ia2d9nvy1#
这是一个更清晰的方式来使用
IndexedStack
与动画,我创建了一个FadeIndexedStack
小部件。https://gist.github.com/diegoveloper/1cd23e79a31d0c18a67424f0cbdfd7ad
用法
字符串
djp7away2#
如果需要使用IndexedStack。
您可以添加自定义动画并在更改选项卡时触发它,如下所示:
的数据
字符串
wb1gzix03#
尝试向IndexedStack添加键,并向AnimatedSwitcher小部件添加transitionBuilder方法,就像这样。
字符串
还有其他很酷的过渡,如ScaleTransition,SizeTransition,FadeTransition
bksxznpy4#
下面是如何做到的示例:
字符串
q8l4jmvw5#
以下是你可以解决这个问题的方法:
1.首先使用下面的代码创建一个新的小部件。
1.这个小部件使用
PageView
,默认情况下它会给予你一个很好的滑动动画,但是如果你愿意的话,你可以自定义动画。1.要保持孩子的状态,只需在每个孩子的小部件中使用AutomaticKeepAliveClientMixin即可。
字符串
qmelpv7a6#
我有点失望,这是不支持开箱即用的IndexedStack,所以我尝试了一个增强版本,将支持自定义转换(有更多的控制),并仍然保持状态的孩子。
我在这里用一个小测试应用程序做了一个repo:https://github.com/IMGNRY/animated_indexed_stack
欢迎任何反馈或PR!
i1icjdpr7#
尝试将key添加到IndexedStack中,这样你的代码看起来就像这样:
字符串
关键字被更改,因此AnimatedSwitcher将知道需要重建其子项。