SliverAppBar
Contents
AppBar和SliverAppBar是Material Design 中的App Bar,也就是Android中的Toolbal,关于Toolbar的设计指南请参考Material Design中Toolbar的内容。
AppBar和SliverAppBar都是继承StatefulWidget类,都代表Toolbar,二者的区别在于AppBar位置的固定在应用最上面,而SliverAppBar是可以跟随内容滚动的。
SliverAppBar的构造方法
|
|
如果你看过AppBar的构造方法,那么你会发现AppBar的构造方法都是在这里面的。其守护星也是一致的,下面我们针对公共的属性都做一下解释:
- leading:在标题前面显示一个控件,在首页通常显示应用的logo;在其他页面通常显示返回按钮
- title:Toolbar中主要内容,通常显示为当前界面的标题文字
- actioons:一个Widget列表,代表Toolbar中所显示的菜单,对于常用的菜单,通常使用IconButton来表示;对于不常用的菜单通常私用PopupMenuButton来显示为三个点,点击后弹出二级菜单
- bottom:一个AppBarbottomWidget对象,通常是TabBar。用来在Toolbar标题下面显示一个Tab导航栏
- elevation:Material Design中的控件z坐标顺序,默认值为4,对于可滚动的SliverAppBar,当SliverAppBar和内容同级的时候,该值为0,当内容滚动SliverAppBar变为Toolbar的时候,修改elevation的值
- flexibleSpace:一个显示在AppBar下方的控件,高度和AppBar高度一样,可以实现一些特殊的效果,该属性通常在SliverAppBar中使用
- backgroundColor:AppBar的颜色,默认值为ThemeData.primaryColor。该值通常和下面三个属性一起使用。
- birghtness:AppBar的亮度,有白色和黑色两种主题,默认值为ThemeData.primaryColorBrightness
- iconTheme:AppBar上图标的颜色,透明度和尺寸信息。默认值为ThemeData.primaryIconTHeme
- textTheme:AppBar上的文字样式,默认值根据不同操作系统显示方式不一ThemeData.primaryTextTheme
- centerTitle:标题是否居中显示,默认值根据不同操作系统显示方式不一样
虽然基本相同,构造方法也是非常简单,但是我们却不能直接使用它,由官方文档可以看出我们通常结合ScrollView来使用它。
我们结合CustomscrollView来看下面的例子吧:
|
|
首先我们使用了NestedScrollView中的headerSliverBuilder属性添加了SliverAppBar
然后我们设置展开的高度为200,不让标题栏随着滚动滚出可视区域
最后我们给NestedScrollView的body加了一个长度为15的ListView
效果如下图:
我们把pinned的属性设置为false(不固定在顶部),再看一下效果:
接下来我们看下bottom属性,允许我们在下面放置其他widget, 其实代码很简单,值不过我们需要让DiscoverlistPage继承于StatefulWiget,然后让State withh TickerProviderStateMixin,并为SliverAppBar添加botton,改造后的代码如下:
|
|
效果:
由于TabBar的高度所以我们并不能让SliverAppBar滑动到顶部,所以要想实现随着SliverAppBar的移动,把TabBar放在bottom也不是很合适的。 在这里,我们可以借助于SliverPersistentHeader中的SliverPersistentHeader属性来解决
SliverPersistentHeader的构造很简单,只有简单的几个属性,不再具体讲了
|
|
全部代码如下:
|
|
效果:
Author zhangwlhaut
LastMod 2019-03-21