在原生android开发中,通常使用FragmentTransaction
创建导航动画,其中actionBar的位置保持固定(但actionBar的内容已更改),而actionBar下方的片段执行过渡动画(如幻灯片或退出)。
简而言之,AppBar
和主体执行不同的过渡动画。在颤抖中,创建这种动画的最佳实践是什么?
目前,我可以想到一种使用Scaffold.body
中的导航并使用Stream
+ StreamBuilder
开始AppBar
重绘的解决方案。类似于以下代码。
Scaffold(
appBar: StreamBuilder<Int>(
stream: Bloc.of(context).currentFragmentId
builder: //Some logic to decide which AppBar is appropriate
),
body: Navigator(
//Navigation between fragments
),
)
但这真的很奇怪。那么是否有最佳实践来做到这一点?请让我知道!
答案 0 :(得分:1)
好吧,因为目前没有答案。我将在这里分享我的解决方案,尽管它并不那么优雅。
解决方案是将AppBar包装在Hero小部件中。由于Scaffold仅将PreferedSize小部件用作应用程序栏,因此需要进行一些自定义。
class HeroAppBar extends StatelessWidget implements PreferredSizeWidget {
//...
@override
final Size preferredSize = Size.fromHeight(kToolbarHeight + (bottom?.preferredSize?.height ?? 0.0));
//...
@override
Widget build(BuildContext context) {
return Hero(
tag: tag,
child: AppBar(
//...
),
);
}
}
并确保您的导航器实现了HeroController。 (默认导航器已实现)