pro*_*bie 6 flutter flutter-sliver flutter-layout
我有一个SliverAppBar带有AnimatedContainer内。此动画容器的高度在运行时会发生变化,因此容器会对其大小进行动画处理。我的问题是,expandedHeight我的 SliverAppBar 已修复。但这需要调整模拟我的动画容器的大小。
有没有办法将 SliverAppBar 设置为“高度总是根据孩子”或类似的东西?AnimatedContainer 没有回调,它在为调整大小设置动画时为我提供了所有更改。如果有这样的回调,我可以expandedHeight自己相应地更改SliverAppBar的属性。
知道如何解决我的问题吗?谢谢!
return SliverAppBar(
elevation: 0,
snap: true,
pinned: false,
floating: true,
forceElevated: false,
primary: false,
automaticallyImplyLeading: false,
backgroundColor: Colors.white,
expandedHeight: _eHeight,
flexibleSpace: Column(children: <Widget>[
AnimatedContainer(
onEnd: onTopBarsAnimationEnd,
height: _trending
? _tabBarHeight: _tabBarHeight + topicsHeight,
duration: Duration(milliseconds: 800),
curve: Curves.fastOutSlowIn,
child: // some child
)
]
)
)
Run Code Online (Sandbox Code Playgroud)
小智 4
如果您检查AnimatedContainer 文档,他们会说:
此类对于通过其内部 AnimationController生成 Container 的不同参数之间的简单隐式转换非常有用。对于更复杂的动画,您可能需要使用AnimatedWidget的子类,例如 DecoratedBoxTransition 或使用您自己的 AnimationController。
在这里,“隐式”意味着您不会控制动画,因此您将无法访问允许您监听动画步骤的AnimationController类。为此,您将需要类似AnimatedWidget 的东西。
深入研究 AnimationController 发现它继承自 ImplicitlyAnimatedWidget,文档说:
当它们的属性发生变化时,ImplicitlyAnimatedWidgets(及其子类)会自动以动画方式呈现它们的变化。为此,他们创建并管理自己的内部动画控制器来为动画提供动力。虽然这些小部件使用起来很简单,并且不需要您手动管理动画控制器的生命周期,但它们也有一定的局限性:除了动画属性的目标值之外,开发人员只能选择动画的持续时间和曲线。如果您需要对动画进行更多控制(例如,您希望将其停止在中间的某个位置),请考虑使用 AnimatedWidget或其子类之一。这些小部件采用动画作为参数来驱动动画。这使开发人员可以完全控制动画,但需要您手动管理底层 AnimationController。
因此,您需要创建 AnimatedController 对象并将其传递给 AnimatedWidget。您可以在文档中查看示例。
最后,要在每个动画步骤中执行某些操作,您需要使用其方法addListener将侦听器函数添加到 AnimatedController ,这通常是在小部件的 initState 方法中完成的。
| 归档时间: |
|
| 查看次数: |
709 次 |
| 最近记录: |