news 2026/4/15 19:08:23

Flutter 零基础入门(二十八):ListView —— 最常用的页面结构

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Flutter 零基础入门(二十八):ListView —— 最常用的页面结构

Flutter 零基础入门(二十八):ListView —— 最常用的页面结构

在上一篇中,我们彻底搞懂了:

  • StatefulWidget 的生命周期
  • initState / build / dispose
  • Flutter 页面是如何“活起来”的

从这一篇开始,我们进入Flutter 业务开发的核心场景

列表页面

几乎所有 App,80% 的页面都是“列表”。


一、为什么 ListView 这么重要?

真实 App 中常见的页面:

  • 新闻列表
  • 商品列表
  • 聊天记录
  • 设置页
  • 用户列表

📌 它们本质上都是:

一列可以滚动的 Widget


二、ListView 是什么?

在 Flutter 中:

ListView 是一个可滚动的 Widget 列表

特点:

  • 支持滚动
  • 自动处理溢出
  • 适合纵向内容很多的页面

三、最简单的 ListView

ListView(children:[Text('第一项'),Text('第二项'),Text('第三项'),],)

效果:

  • 自动纵向排列
  • 超出屏幕可以滚动

四、ListView + ListTile(入门必会)

1️⃣ ListTile 是什么?

ListTile是 Flutter 提供的标准列表项组件

ListTile( title: Text('标题'), )

2️⃣ 一个完整 ListTile

ListTile( leading: Icon(Icons.person), title: Text('用户名'), subtitle: Text('这是副标题'), trailing: Icon(Icons.arrow_forward_ios), )

这是非常标准、非常常见的列表样式。


3️⃣ ListView + ListTile 示例

ListView( children: [ ListTile(title: Text('设置')), ListTile(title: Text('账号')), ListTile(title: Text('关于')), ], )

五、ListView.builder:真正的实战重点(非常重要)

1️⃣ 为什么需要 builder?

当数据很多时:

❌ children 一次性创建所有 Widget
✅ builder 按需创建(性能更好)


2️⃣ 基本写法

ListView.builder( itemCount: 20, itemBuilder: (context, index) { return ListTile( title: Text('第 $index 项'), ); }, )

📌 记住一句话:

builder 是“用一个模板,生成很多项”


3️⃣ itemBuilder 参数说明

(BuildContext context, int index)
  • context:当前列表项的上下文
  • index:当前项的下标(从 0 开始)

六、使用数据列表生成 UI(真实开发)

final List<String> items = ['苹果', '香蕉', '橘子']; ListView.builder( itemCount: items.length, itemBuilder: (context, index) { return ListTile( title: Text(items[index]), ); }, )

📌 这是数据驱动 UI 的第一步


七、列表项点击(非常常见)

ListView.builder( itemCount: items.length, itemBuilder: (context, index) { return InkWell( onTap: () { print('点击了 ${items[index]}'); }, child: ListTile( title: Text(items[index]), ), ); }, )

八、ListView 中的分割线

1️⃣ Divider

Divider()

2️⃣ ListView.separated(推荐)

ListView.separated( itemCount: items.length, itemBuilder: (context, index) { return ListTile( title: Text(items[index]), ); }, separatorBuilder: (context, index) { return Divider(); }, )

📌分割线逻辑更清晰


九、ListView 常见错误与解决方案

❌ 错误 1:ListView 放在 Column 中报错

Column( children: [ ListView(...), ], )

❗ 报错原因:

ListView 没有高度约束


✅ 正确写法:Expanded

Column( children: [ Expanded( child: ListView(...), ), ], )

❌ 错误 2:嵌套滚动冲突

初学阶段建议:

一个页面只用一个 ListView


十、一个完整“真实页面”示例

class ListDemoPage extends StatelessWidget { final List<String> items = [ '个人信息', '账号设置', '隐私', '关于我们', ]; @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar(title: Text('设置')), body: ListView.separated( itemCount: items.length, itemBuilder: (context, index) { return ListTile( title: Text(items[index]), trailing: Icon(Icons.arrow_forward_ios, size: 16), onTap: () { print(items[index]); }, ); }, separatorBuilder: (_, __) => Divider(), ), ); } }

十一、新手常见误区总结

❌ 不会用 builder
❌ children 写死大量数据
❌ ListView 嵌套 Column 不加 Expanded
❌ 列表项布局混乱


十二、这一篇你真正学会了什么?

你已经掌握了:

  • ListView 的作用
  • ListView.builder 的核心思想
  • 数据驱动列表 UI
  • 点击列表项
  • 分割线的正确用法

你现在已经能写出:

真正的业务页面列表结构


十三、总结

本篇你学会了:

  • Flutter 中最重要的滚动组件
  • 列表的标准写法
  • 常见布局坑点

🔜 下一篇预告

《Flutter 零基础入门(二十九):ListView 进阶 —— 自定义列表项与复杂布局》

下一篇我们将学习:

  • 自定义列表项 UI
  • 列表项中嵌套 Row / Column
  • 卡片式列表
  • 更接近真实产品的布局

从下一篇开始:

你的 Flutter 页面将“无限接近真实商业 App” 🚀

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/13 3:17:47

绝了,官方免费

今天推荐两款软件&#xff0c;一款是PDF解除打印、编辑权限的工具&#xff0c;一款是打印机工具箱&#xff0c;有需要的小伙伴可以下载收藏。 第一款&#xff1a;PDF Password Remover PDF Password Remover是一款可移除PDF“所有者密码”的工具&#xff0c;可解除打印、编辑、…

作者头像 李华
网站建设 2026/3/13 21:13:01

VS2026中getsockopt使用要点与网络编程新特性

在网络编程中&#xff0c;getsockopt函数是获取套接字选项状态的核心工具。随着Visual Studio 2026的发布&#xff0c;开发者在Windows平台进行Socket编程时&#xff0c;需要了解其环境对标准网络API的支持是否有变化&#xff0c;以及如何高效、稳定地使用这一基础函数。本文将…

作者头像 李华
网站建设 2026/4/14 4:22:48

大语言模型(LLM)微调方法(总结)

众所周知&#xff0c;大语言模型(LLM)正在飞速发展&#xff0c;各行业都有了自己的大模型。其中&#xff0c;大模型微调技术在此过程中起到了非常关键的作用&#xff0c;它提升了模型的生成效率和适应性&#xff0c;使其能够在多样化的应用场景中发挥更大的价值。 那么&#x…

作者头像 李华
网站建设 2026/4/14 0:13:04

我让AI读了1000个测试用例,总结出“好用例”的5个特征

作为一名资深软件测试工程师&#xff0c;我最近进行了一项实验&#xff1a;训练一个AI模型分析1000个真实测试用例&#xff0c;涵盖电商、金融、医疗等多个领域。这些用例来自开源项目和行业案例库&#xff0c;目的是从海量数据中识别“好用例”的共性模式。通过自然语言处理和…

作者头像 李华
网站建设 2026/4/12 2:52:37

实时AI监控测试实战:从理论到落地的全面指南

随着软件开发生命周期的加速&#xff0c;测试工程师面临需求频繁变更、回归测试工作量大、多环境兼容性挑战等问题。传统监控方法已难以满足敏捷开发需求&#xff0c;而AI驱动的实时监控成为破局关键。本文基于行业实践&#xff0c;系统解析5大AI监控工具&#xff0c;提供可复用…

作者头像 李华
网站建设 2026/4/15 13:12:23

‌“边界值测试用例”:不是0~100,是-1,0,1,99,100,101

边界值测试的基石作用‌ 在软件测试领域&#xff0c;边界值分析法&#xff08;Boundary Value Analysis, BVA&#xff09;是黑盒测试的核心技术之一&#xff0c;它专注于输入域的边缘值&#xff0c;以捕捉系统在临界点上的潜在缺陷。传统上&#xff0c;测试从业者常采用0~100的…

作者头像 李华