详解Android Flutter中SliverAppBar的使用教程
作者:程序那些事 时间:2023-06-23 12:11:27
简介
对于一个APP来说,肯定会有一个AppBar,这个AppBar一般包含了APP的导航信息等。虽然我们可以用一个固定的组件来做为AppBar,但是这样就会丢失很多特效,比如将AppBar固定在顶部,AppBar可以在滑动的过程中进行大小变换等。
当然这一切都不需要自己来实现,flutter已经为我们提供了一个非常强大的AppBar组件,这个组件叫做SliverAppBar。
SliverAppBar详解
我们先来看下SliverAppBar的定义:
class SliverAppBar extends StatefulWidget
可以看到SliverAppBar是一个StatefulWidget,它里面的状态包含的是一些配置信息,包括FloatingHeaderSnapConfiguration,OverScrollHeaderStretchConfiguration和PersistentHeaderShowOnScreenConfiguration等。
SliverAppBar可以接收很多属性,我们接下来会讲解其中最重要和最常用的几个属性。
1.forceElevated
forceElevated是一个bool值,表示是否显示AppBar的阴影效果,默认值是false。
2.primary
primary使用来配置AppBar的属性,表示AppBar是否显示在界面的Top位置。如果设置为true,那么AppBar将会被放置在Top的位置,并且使用的高度是系统status bar的高度。
3.floating
floating是一个非常重要的属性,因为对于SliverAppBar来说,当界面向远离SliverAppBar的方向滚动的时候,SliverAppBar会隐藏或者缩写为status bar的高度,floating的意思就是当我们向SliverAppBar滑动的时候,SliverAppBar是否浮动展示。
4.pinned
表示SliverAppBar在滚动的过程中是否会固定在界面的边缘。
5.snap
snap是和floating一起使用的属性,snap表示当向SliverAppBar滚动的时候,SliverAppBar是否立即展示完全。
6.automaticallyImplyLeading
automaticallyImplyLeading是用在AppBar中的属性,表示是否需要实现leading widget。
其中最常用的就是floating,pinned和snap这几个属性。
另外还有一个flexibleSpace组件,他是SliverAppBar在float的时候展示的widget,通常和expandedHeight配合使用。
SliverAppBar的使用
上面讲解了SliverAppBar的构造函数和基础属性,接下来我们通过具体的例子来讲解SliverAppBar如何使用。
通常来说SliverAppBar是和CustomScrollView一起使用的,也就是说SliverAppBar会被封装在CustomScrollView中。
CustomScrollView中除了SliverAppBar之外,还可以添加其他的sliver组件。
首先我们定义一个SliverAppBar:
SliverAppBar(
pinned: true,
snap: true,
floating: true,
expandedHeight: 200.0,
flexibleSpace: FlexibleSpaceBar(
title: const Text('SliverAppBar'),
background: Image.asset("images/head.jpg"),
),
),
这里我们设置pinned,snap和floating的值都为true,然后设置了expandedHeight和flexibleSpace。
这里的flexibleSpaces是一个FlexibleSpaceBar对象,这里我们设置了title和background属性。
接着我们需要把SliverAppBar放到CustomScrollView中进行展示。
Widget build(BuildContext context) {
return CustomScrollView(
slivers: <Widget>[
SliverAppBar(
...
),
SliverList(
delegate: SliverChildBuilderDelegate(
(BuildContext context, int index) {
return Container(
color: index.isOdd ? Colors.white : Colors.green,
height: 100.0,
child: Center(
child: ListTile(
title: Text(
'1888888888' + index.toString(),
style: TextStyle(fontWeight: FontWeight.w500),
),
leading: Icon(
Icons.contact_phone,
color: Colors.blue[500],
),
),
),
);
},
childCount: 10,
),
),
],
);
在SliverAppBar之外,我们还提供了一个SliverList,这里使用了SliverChildBuilderDelegate来构造10个ListTile对象。
最后运行可以得到下面的界面:
默认情况下SliverAppBar是展开状态,如果我们将下面的SliverList向上滑动,flexibleSpace就会被隐藏,我们可以得到下面的界面:
当我们向上慢慢滑动的时候,因为设置的是floating=true, 并且snap=true,所以只要向上滑动,就会展示所有的flexibleSpace:
当我们将floating设置为false的时候,只有向上滑动到顶端的时候,flexibleSpace才会全部展示出来。
来源:https://juejin.cn/post/7152787686904823822
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
解决eclipse上传svn忽略target文件夹的坑
![](https://img.aspxhome.com/file/2023/5/58445_0s.jpg)
Java中对话框的弹出方法
Android WebView与JS交互全面详解(小结)
![](https://img.aspxhome.com/file/2023/5/138595_0s.png)
C#多线程学习之(三)生产者和消费者用法分析
c#爬虫爬取京东的商品信息
JPA中EntityListeners注解的使用详解
C#警惕匿名方法造成的变量共享实例分析
浅谈Android Studio 4.1 更新内容
![](https://img.aspxhome.com/file/2023/5/138735_0s.gif)
Java实现有限状态机的推荐方案分享
![](https://img.aspxhome.com/file/2023/9/77989_0s.png)
Java使用FileInputStream流读取文件示例详解
![](https://img.aspxhome.com/file/2023/0/64430_0s.jpg)
Java控制台实现猜拳游戏
c# BackgroundWorker使用方法
![](https://img.aspxhome.com/file/2023/1/76411_0s.png)
C#实现Windows Form调用R进行绘图与显示的方法
![](https://img.aspxhome.com/file/2023/0/81090_0s.jpg)
Eclipse新建Android项目报错解决方案详细汇总
![](https://img.aspxhome.com/file/2023/6/106836_0s.png)
Spring rest接口中的LocalDateTime日期类型转时间戳
JavaWeb Servlet实现文件上传与下载功能实例
![](https://img.aspxhome.com/file/2023/2/62532_0s.png)
详解C#中的字符串拼接@ $
Java 定时任务技术趋势详情
![](https://img.aspxhome.com/file/2023/0/96070_0s.webp)
C#实现打字小游戏
![](https://img.aspxhome.com/file/2023/2/88402_0s.jpg)
Android音视频开发只硬件解码组件MediaCodec讲解
![](https://img.aspxhome.com/file/2023/2/130332_0s.png)