Flutter 滚动组件总结

📚 Flutter 滚动组件总结

Flutter 中的滚动主要基于 ScrollableViewport 机制,常见的滚动组件大致可以分为以下几类:


一、单一方向滚动容器

1. SingleChildScrollView

  • 用途:让单个子组件在一个方向上可以滚动。
  • 作用/特点
    • 只能有 一个子组件
    • 常用于内容超出屏幕时的简单滚动(如长文本、表单)。
    • 支持设置 scrollDirection(默认纵向)。
  • 效果:当内容大于屏幕可视范围时,可以手指滑动滚动。
  • 缺点:所有内容会一次性渲染,性能不适合大量子组件。

二、列表类滚动组件(多子元素)

2. ListView

  • 用途:最常用的滚动列表组件。
  • 作用/特点
    • 支持垂直/水平滚动。
    • 支持四种构造方式:childrenbuilderseparatedcustom
    • 默认会懒加载子项(builder/separated)。
  • 效果:适合数据量较多的场景,如聊天列表、新闻流。

3. GridView

  • 用途:网格布局的滚动组件。
  • 作用/特点
    • 适合展示图片墙、商品列表。
    • 支持 GridView.count(指定列数)、GridView.extent(指定最大宽度)、builder(懒加载)、custom
  • 效果 :自动滚动的网格排列,性能类似 ListView

4. CustomScrollView

  • 用途:自定义滚动效果,支持组合不同的 Sliver。
  • 作用/特点
    • CustomScrollView 内部由 Sliver 组成。
    • 可以把 SliverAppBarSliverListSliverGrid 等组合在一起。
    • 常用于复杂的滚动页面(如电商首页、微博首页)。
  • 效果:支持吸顶 AppBar、局部网格 + 列表组合。

三、表格类滚动组件

5. Table / DataTable + SingleChildScrollView

  • 用途:表格数据展示(静态或动态)。
  • 作用/特点
    • DataTable 一般和 SingleChildScrollView 组合使用实现横向/纵向滚动。
    • 适合管理后台数据表格展示。
  • 效果:类似 Excel 的表格,可以滚动。

四、特殊滚动组件

6. PageView

  • 用途:页面级滚动。
  • 作用/特点
    • 支持横向/纵向整页切换。
    • 适合实现引导页、轮播图、Tab 页面。
    • 常配合 PageController 使用。
  • 效果:一屏一屏的翻页滚动,带动画。

7. NestedScrollView

  • 用途:嵌套滚动,解决多个滚动视图嵌套时的滑动冲突。
  • 作用/特点
    • 常见于 顶部 AppBar + TabBar + TabBarView
    • 支持 AppBar 折叠、吸顶效果。
  • 效果:类似微博、知乎首页,上下滑动时 AppBar 收起展开。

8. Scrollable(底层类)

  • 用途:所有滚动组件的底层基类。
  • 作用/特点
    • 一般不会直接用,而是用封装好的 ListView / GridView
    • 如果要完全自定义滚动行为,可以用它。

五、可滚动的 UI 组件

这些虽然不是专门的滚动容器,但 自带滚动能力

9. TextField / EditableText

  • 当文字内容超出时,内部会滚动。

10. Scrollbar

  • 用途:给任何可滚动组件加上滚动条。
  • 作用:提升用户体验,特别是 PC / Web 平台。
  • 效果:显示拖动条,可滑动跳转。

11. DraggableScrollableSheet

  • 用途:一个可拖动的底部面板。
  • 作用:常用于底部弹出的可拖动面板(如地图下方的地点列表)。
  • 效果:类似 Google Maps 的底部拖动面板。

六、滚动监听与控制

12. NotificationListener

  • 用途:监听滚动事件。
  • 作用:实现上拉加载、隐藏标题栏、滚动进度条。

13. ScrollController

  • 用途:控制滚动位置。
  • 作用:可实现滚动到指定位置、监听滚动距离、实现返回顶部。

📝 总结对比表

组件 主要用途 特点 使用场景
SingleChildScrollView 单子元素滚动 简单,性能差 表单、长文本
ListView 列表滚动 懒加载,性能好 新闻流、聊天记录
GridView 网格滚动 图片/商品墙 电商、相册
CustomScrollView Sliver 组合 高度自定义 首页复杂布局
PageView 整页切换 翻页效果 引导页、轮播图
NestedScrollView 嵌套滚动 解决冲突 吸顶 Tab 页
Scrollbar 滚动条 PC/Web体验好 桌面应用
DraggableScrollableSheet 底部拖动面板 可展开收缩 地图、播放器歌词
NotificationListener 滚动监听 事件响应 上拉加载、滚动隐藏 AppBar
ScrollController 滚动控制 精确定位 返回顶部、滚动动画

📌 一句话总结

  • 简单滚动SingleChildScrollView
  • 列表ListView
  • 网格GridView
  • 复杂布局CustomScrollView + Sliver
  • 整页切换PageView
  • 嵌套吸顶NestedScrollView
  • 增强体验Scrollbar / DraggableScrollableSheet / ScrollController

相关推荐
码事漫谈1 分钟前
AI提效,到底能强到什么程度?
前端·后端
IT_陈寒1 分钟前
React hooks依赖数组这个坑差点把我埋了
前端·人工智能·后端
阿祖zu29 分钟前
内容创作 AI 透明化声明倡议与项目开源
前端·后端·github
lpfasd12334 分钟前
TypeScript + Cloudflare 全家桶部署项目全流程
前端·javascript·typescript
ZC跨境爬虫38 分钟前
极验滑动验证码自动化实战:背景提取、缺口定位与Playwright滑动模拟
前端·爬虫·python·自动化
前端Hardy1 小时前
字节/腾讯内部流出!Claude Code 2026王炸玩法!效率暴涨10倍
前端·javascript·vue.js
糟糕好吃1 小时前
AI 全流程解析(LLM / Token / Context / RAG / Prompt / Tool / Skill / Agent)
前端·后端·设计模式
世人万千丶1 小时前
Flutter 框架跨平台鸿蒙开发 - 鸿蒙版本五子棋游戏应用
学习·flutter·游戏·华为·harmonyos·鸿蒙
快手技术1 小时前
快手广告系统全面迈入生成式推荐时代!GR4AD:从Token到Revenue的全链路重构
前端·后端
前端Hardy1 小时前
大厂都在偷偷用的 Cursor Rules 封装!告别重复 Prompt,AI 编程效率翻倍
前端·javascript·面试