news 2026/7/18 21:14:02

Flutter:NestedScrollView嵌套的滚动组件

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Flutter:NestedScrollView嵌套的滚动组件

NestedScrollView 使用指南

📖 什么是 NestedScrollView?

NestedScrollView是 Flutter 提供的一个特殊的滚动组件,用于处理嵌套滚动的场景。它最常见的使用场景是:

  • 头部可折叠的页面(如个人主页、商品详情页)
  • 头部固定,内容可滚动的页面
  • 需要协调多个滚动视图的页面

🎯 核心概念

1. 两个滚动区域

NestedScrollView将页面分为两个滚动区域:

┌─────────────────────────┐ │ Header (外层滚动) │ ← headerSliverBuilder 构建 │ - SliverAppBar │ │ - 可折叠的头部内容 │ ├─────────────────────────┤ │ Body (内层滚动) │ ← body 构建 │ - ListView │ │ - GridView │ │ - 任何可滚动组件 │ └─────────────────────────┘

2. 滚动协调机制

  • 向下滚动:先滚动 Header(折叠头部),Header 完全折叠后,才滚动 Body
  • 向上滚动:先滚动 Body(内容上移),Body 滚动到顶部后,才展开 Header

📝 基本结构

NestedScrollView(// 外层滚动控制器(可选)controller:scrollController,// 构建头部区域(返回 Sliver 组件列表)headerSliverBuilder:(BuildContextcontext,bool innerBoxIsScrolled){return[SliverAppBar(...),// 其他 Sliver 组件];},// 构建内容区域(普通 Widget)body:ListView(...),)

🔍 详细解析(基于你的代码)

1.NestedScrollView 基本配置

NestedScrollView(// 滚动控制器:用于监听滚动位置、实现渐变效果等controller:controller.scrollController,// headerSliverBuilder: 构建头部区域// - context: 上下文// - innerBoxIsScrolled: 内部滚动视图是否已经滚动(bool)headerSliverBuilder:(BuildContextcontext,bool innerBoxIsScrolled){return[SliverAppBar(...),// 返回 Sliver 组件列表];},// body: 构建内容区域(普通 Widget,不是 Sliver)body:SmartRefresher(...),)

2.SliverAppBar 详解

SliverAppBar是最常用的头部组件,支持折叠、固定等效果。

SliverAppBar(// ========== 高度相关 ==========// 展开时的高度(不包括 AppBar 本身的高度)expandedHeight:expandedHeight,// 740.w// ========== 滚动行为 ==========// floating: 向下滚动时,AppBar 是否立即显示floating:false,// false = 需要滚动到顶部才显示// pinned: AppBar 是否固定在顶部pinned:true,// true = 折叠后固定在顶部// snap: 配合 floating 使用,快速显示/隐藏// snap: true, // 需要 floating: true// ========== 样式相关 ==========// 背景色(可以动态改变实现渐变效果)backgroundColor:Colors.white.withValues(alpha:controller.opacity),// 阴影高度elevation:0,// ========== 内容相关 ==========// 左侧按钮(返回按钮)leading:IconButton(icon:Icon(Icons.arrow_back_ios),onPressed:()=>Get.back(),),// 标题title:TextWidget.body('我的粉丝'),// 右侧按钮// actions: [IconButton(...)],// ========== 展开区域 ==========// flexibleSpace: 展开时显示的内容flexibleSpace:FlexibleSpaceBar(// 背景内容background:_buildHeaderBackground(),// 折叠模式// - CollapseMode.pin: 固定在顶部// - CollapseMode.parallax: 视差效果// - CollapseMode.none: 跟随滚动collapseMode:CollapseMode.pin,// 标题(会自动处理折叠动画)// title: Text('标题'),// 标题内边距// titlePadding: EdgeInsets.only(left: 16, bottom: 16),),)

3.高度计算详解

// 状态栏高度(刘海屏、挖孔屏等)finaldouble statusBarHeight=
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/15 5:50:01

GPT-SoVITS能否实现语音疲劳度模拟?科研用途

GPT-SoVITS能否实现语音疲劳度模拟?科研用途 在心理学与人因工程研究中,语音早已超越“信息传递”的基本功能,成为反映个体生理与心理状态的重要生物信号。尤其是在疲劳检测领域,人类语音的语速、音调、共振峰稳定性以及发音连贯性…

作者头像 李华
网站建设 2026/7/15 7:21:54

python高校毕业生与学位资格审核系统_zpl96_pycharm django vue flask

目录已开发项目效果实现截图开发技术路线相关技术介绍核心代码参考示例结论源码lw获取/同行可拿货,招校园代理 :文章底部获取博主联系方式!已开发项目效果实现截图 同行可拿货,招校园代理 python高校毕业生与学位资格审核系统_zpl96_pycharm django v…

作者头像 李华
网站建设 2026/7/15 1:51:28

DDR4系列之ECC功能(十二)

一、 概况 在上一章节我们把DDR的乒乓操作的代码进行了讲解,在本章节来进行验证功能,使用两个模块来产生数据并接收数据。产生递增数据,可以通过接收数据的值,来验证数据的传输。 二、 流程框图三、 send_data_ctrl模块 模块接口列…

作者头像 李华
网站建设 2026/7/15 10:32:46

项目解决方案:充电车棚烟火识别解决方案

目录 第一章 项目背景 1.1 电动自行车充电火灾频发背景 1.2 火灾监控的重要性 1.3 地方标准与政策要求 1.4 技术发展趋势 第二章 需求确认 2.1 实时烟火检测需求 2.2 双重验证与准确性提升 2.3 远程确认与灭火启动 2.4 多平台访问与集中管理 2.5 兼容性与扩展性 第…

作者头像 李华
网站建设 2026/7/15 5:47:40

从零开始实现一个简单的GPU矩阵乘法

假设我们要计算 CABC A \times BCAB,其中 AAA 是 MKM \times KMK 矩阵,BBB 是 KNK \times NKN 矩阵,CCC 是 MNM \times NMN 矩阵。1. 矩阵乘法回顾 矩阵 CCC 中任意元素 Ci,jC_{i, j}Ci,j​ 的值,是通过将矩阵 AAA 的第 iii 行与…

作者头像 李华
网站建设 2026/7/16 11:13:29

如何测量你的GPU应用性能:算力与带宽

在高性能计算(HPC)和人工智能领域,开发一个能够正确运行的CUDA程序仅仅是第一步。真正的挑战在于如何评估其运行效率,并识别性能瓶颈。GPU的应用性能评价主要围绕两个核心指标展开:计算吞吐量(算力&#xf…

作者头像 李华