Flutter-在导航期间创建固定的AppBar的最佳实践是什么

时间:2018-12-08 11:08:00

标签: flutter flutter-layout flutter-animation

在原生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
    ),
)

但这真的很奇怪。那么是否有最佳实践来做到这一点?请让我知道!

1 个答案:

答案 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。 (默认导航器已实现)