第一百五十九回 SliverAppBar组件

本文介绍了Flutter中的SliverAppBar组件,其可折叠/展开,常与SliverList配合。重点讲解了flexibleSpace属性的用法,通过示例代码展示了如何设置标题、背景、高度和内容显示方式。

我们在上一章回中介绍了SliverGrid组件相关的内容,本章回中将介绍SliverAppBar组件.闲话休提,让我们一起Talk Flutter吧。

概念介绍

我们在本章回中介绍的SliverAppBar和普通的AppBar类似,它们的不同之处在于SliverAppBar创建的内容可以折叠和展开,因此它主要和SliverList等组件配合使用,这样就可以创建一个滑动时折叠或者展开的标题,这样可以丰富标题的内容。本章回中将详细介绍SliverAppBar的使用方法。

使用方法

和其它组件一样SliverAppBar提供了相关的属性来控制自己,下面是常用的属性,掌握这些属性就可以使用SliverAppBar了。

  • title属性:主要用来显示标题,和普通AppBar中的title一样;
  • backgroundColor属性:主要用来控制appBar的背景颜色;
  • collapsedHeight属性:主要用来控制AppBar关闭时的高度;
  • expandedHeight属性:主要用来控制AppBar展开时的高度;
  • flexibleSpace属性:主要用来存放AppBar展开时的内容;

上面介绍的这些属性中我重点介绍一下flexibleSpace属性,该属性是Widget类型,因此我们需要使用组件给它赋值,常用FlexibleSpace类型的组件给它赋值,该组件属于容器类组件,它本身只负责装饰,而不显示具体的内容,具体的内容在background属性对应的组件中。我们将在后面的小节中通过代码来演示它的用法。

示例代码

SliverAppBar(
  title: const Text('Title of SliverAppBar'),
  backgroundColor: Colors.purpleAccent,
  ///关闭和展开时的高度
  collapsedHeight: 60,
  expandedHeight: 300,
  ///下滑屏幕时先显示appBar下面的内容,后显示appBar中的内容,默认值为false表示此情况
  ///设置为true时,下滑屏幕时先显示appBar中的内容,后显示appBar下面的内容;
  floating: true,
  ///向上拖动屏幕,下面的内容向上滚动,appBar逐渐缩小,最后是否显示appBar,默认是56高度的appBar
  ///默认值为false,表示不显示
  pinned: true,

  ///appBar空间扩展后显示的内容
  flexibleSpace: FlexibleSpaceBar(
    ///这个title在appBar的最下方,可以不设定,缩小后它会和SliverAppBar的title重合
    title: const Text('title of FlexibleSpaceBar'),
    background: Container(
      decoration: const BoxDecoration(
        image:DecorationImage(
          opacity: 0.8,
          // colorFilter: ColorFilter.mode(Color.fromARGB(100, 200, 20,30),BlendMode.difference),
          image: AssetImage("images/ex.png"),
          fit: BoxFit.fill,
        ),
      ),
      ///扩展空间中主要显示的内容
      child: const Center(child: Text('child of container')),
    ),
    centerTitle: true,
    ///拉伸和折叠时的样式,效果不是很明显
    collapseMode: CollapseMode.pin,
    stretchModes: const [
      StretchMode.zoomBackground,
      StretchMode.blurBackground,
      StretchMode.fadeTitle,
    ],
  ),
),

上面的示例代码中添加了详细的注释,这样方便大家理解代码。不过依据目前的知识我们还不能演示程序的运行结果,因为还需要其它组件配合才可以运行,大家不用担心,目前只需要熟练掌握如何创建SliverAppBar组件就可以了,我们在后面章回中会使用本章回创建的组件给大家演示程序运行效果。

看官们,与"SliverAppBar组件"相关的内容就介绍到这里,欢迎大家在评论区交流与讨论!

<think>根据用户的问题,用户想了解SliverAppBar中expandedHeight属性的使用和效果。结合提供的引用内容,特别是引用[1]和[3]中提到了expandedHeight属性,它用于设置SliverAppBar展开时的高度。当用户滚动时,SliverAppBar会根据这个高度进行伸缩。 引用[1]提到:当用户滚动时,SliverAppBar会根据expandedHeight属性伸缩。引用[3]提到:SliverAppBar创建的内容可以折叠和展开,因此主要和SliverList等组件配合使用。 因此,答应重点解释expandedHeight属性的作用,即它定义了SliverAppBar完全展开时的高度。同时,需要给出一个使用该属性的示例代码,展示其实际效果。 另外,用户要求生成相关问题,所以最后需要添加相关问题部分。 注意:所有行内数学表达式使用$...$格式,但本问题不涉及数学表达式,所以无需使用。独立公式也不需要。使用中文答,并正确引用。</think>### SliverAppBar 的 expandedHeight 属性详解 `expandedHeight` 是 Flutter 中 `SliverAppBar` 的核心属性之一,用于控制应用栏在完全展开状态时的高度。当用户向上滚动时,应用栏会展开至该高度;向下滚动时,应用栏会收缩至最小高度(默认为 `AppBar` 的标准高度)。 #### 属性说明 - **类型**:`double` - **作用**:定义 `SliverAppBar` 完全展开时的最大高度 - **典型值范围**:200.0-400.0(根据设计需求调整) - **必须配合**:`flexibleSpace` 属性使用,否则展开区域无内容 #### 基础使用示例 ```dart SliverAppBar( expandedHeight: 250.0, // 展开高度设为250像素 flexibleSpace: FlexibleSpaceBar( title: Text('旅行相册'), background: Image.network( 'https://example.com/mountain.jpg', fit: BoxFit.cover, ), ), pinned: true, // 滚动时固定标题栏 snap: false, floating: false, ) ``` #### 效果说明 1. **初始状态**:应用栏显示完整背景图(250像素高) 2. **向下滚动**:背景图逐渐收缩,标题上移至导航栏位置 3. **向上滚动**:背景图展开至250像素,显示完整内容 4. **临界点**:当滚动偏移量达到 `expandedHeight - kToolbarHeight` 时,进入收缩状态[^3] #### 高级用法:结合动画 ```dart double _getAppBarHeight(double scrollOffset) { return scrollOffset > 100 ? 80.0 : 250.0; } @override Widget build(BuildContext context) { return CustomScrollView( slivers: [ SliverAppBar( expandedHeight: _getAppBarHeight(_scrollController.offset), flexibleSpace: LayoutBuilder( builder: (context, constraints) { return FlexibleSpaceBar( title: AnimatedOpacity( opacity: constraints.maxHeight > 130 ? 1.0 : 0.0, duration: Duration(milliseconds: 300), child: Text('动态标题'), ), background: /* 自定义背景组件 */ ); }, ), ), // 其他Sliver组件 ], ); } ``` #### 注意事项 1. 必须与 `CustomScrollView` 和 `SliverList`/`SliverGrid` 配合使用[^3] 2. 当 `pinned: true` 时,标题栏会固定在顶部 3. `floating` 和 `snap` 属性可控制快速展开行为 4. 背景图建议使用 `BoxFit.cover` 避免拉伸变形[^1] [^1]: 在这个示例中,我们创建了一个 SliverAppBar,它具有一个 FlexibleSpaceBar 作为其 flexibleSpace。当用户滚动时,SliverAppBar 会根据 expandedHeight 属性伸缩。 [^2]: SliverAppBar 是一个可以随着滚动而变化的应用栏。它可以在用户向下滚动时收缩,向上滚动时展开。 [^3]: SliverAppBar创建的内容可以折叠和展开,因此它主要和SliverList等组件配合使用。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

talk_8

真诚赞赏,手有余香

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值