当前位置:首页 > 技术知识 > 正文内容

Flutter 之 ListView(flutter框架)

maynowei3周前 (08-02)技术知识17

在 Flutter 中,ListView 可以沿一个方向(垂直或水平方向)来排列其所有子 Widget,常被用于需要展示一组连续视图元素的场景

ListView 构造方法

  • ListView:仅适用于列表中含有少量元素的场景
  • ListView.build:适用于子 Widget 比较多的场景
  • ListView.separated:适用于需要设置分割线的场景

构造方法名 特点 使用场景 ListView 一次性创建好所有子 Widget 适用于展示少量连续子 Widget 的场景 ListView.build 提供了子 Widget 创建方法,仅在需要展示时才创建 适用于子 Widget 较多,且视觉效果呈现某种规律性的场景 ListView.separated 提供了子 Widget 创建方法,仅在需要展示时才创建,且提供了自定义分割线的功能 适用于子 Widget 较多,且视觉效果呈现某种规律性、每个子 Widget 之间需要分割线的场景

ListView

可以通过设置 children 参数,将所有子 Widget 包含到 listView 中,但这种创建方法要求提前将所有子 Widget 一次性创建好,而不是等到真正需要在屏幕上显示时才创建,即这种方法是导致性能下降。因此,这种方式只适合列表中含有少量元素的场景

class List extends StatelessWidget {
 @override
 Widget build(BuildContext context) {
 return Scaffold(
 appBar: AppBar(
 title: Text("Android小白营"),
 ),
 body: ListView(
 children: <Widget>[
 ListTile(
 leading: Icon(
 Icons.home,
 color: Colors.cyan, // 图标颜色
 ),
 title: Text("首页"),
 selected: true, // 设置状态为选中状态
 ),
 ListTile(
 leading: Icon(
 Icons.add_shopping_cart,
 color: Colors.black54,
 ),
 title: Text("购物车"),
 ),
 ListTile(
 leading: Icon(
 Icons.account_circle,
 color: Colors.black54,
 ),
 title: Text("我的"),
 )
 ],
 ),
 );
 }
}

运行结果如下

ListView.builder

  • itemBuilder:列表项的创建方法。当列表滚动到相应位置时,ListView 会调用该方法创建对应的子 Widget
  • itemCount:列表项的数目。如果不设置或设置为空,则表示 ListView 为无限列表
  • itemExtent:列表项高度。可选参数,但对于定高的列表项元素,建议设置该参数的值(不设置时,ListView 会动态的根据子 Widget 创建完成后的结果,决定自身的视图高度,以及子 Widget 在 ListView 中的相对位置)
class ListBuild extends StatelessWidget {
 @override
 Widget build(BuildContext context) {
 return Scaffold(
 body: ListView.builder(
 itemBuilder: (context, index) => ListTile(
 leading: Icon(Icons.adb),
 title: Text("下标" + index.toString()),
 ),
 itemExtent: 46, // 列表项高度
 itemCount: 50, //列表项总数,不设置为无限加载
 ),
 );
 }
}

运行结果如下

ListView.separatorBuilder

设置列表项之间的分隔线,可以根据下标设置不同的分隔线

class ListSeparated extends StatelessWidget {
 @override
 Widget build(BuildContext context) {
 return Scaffold(
 appBar: AppBar(
 title: Text("Android小白营"),
 ),
 body: ListView.separated(
 itemBuilder: (context, index) => GestureDetector(
 child: ListTile(
 leading: Icon(Icons.adb),
 title: Text("下标" + index.toString()),
 ),
 onTap: () => Fluttertoast.showToast(msg: index.toString()), // 列表项点击事件
 ),
 separatorBuilder: (BuildContext context, index) {
 Divider divider;
 if (index % 2 == 0) {
 divider = Divider(
 thickness: 1, // 分隔线宽度
 height: 0,
 color: Colors.black12, // 分隔线颜色
 );
 } else {
 divider = Divider(
 thickness: 2,
 height: 0,
 color: Colors.deepOrangeAccent,
 );
 }
 return divider;
 },
 itemCount: 100,
 ),
 );
 }
}

运行效果如下

本文由博客一文多发平台 https://openwrite.cn?from=article_bottom 发布!

相关文章

事半功倍 轻松制作可交互移动原型

写在前面先讲个场景,看看有多少人躺枪,你在一个没有专职的交互设计师的公司做客户端的产品,基本上产品和交互的活儿你全承包了,当你准备好一切需要向领导和项目团队一起讲新版本的设计:做过WEB产品的老手,或...

网络安全常用术语(网络安全常用术语介绍)

黑客帽子之分白帽白帽:亦称白帽黑客、白帽子黑客,是指那些专门研究或者从事网络、计算机技术防御的人,他们通常受雇于各大公司,是维护世界网络、计算机安全的主要力量。很多白帽还受雇于公司,对产品进行模拟黑客...

机器人需求驱动导航新SOTA,成功率提升15%!浙大&amp;vivo联手打造

CogDDN团队 投稿量子位|公众号QbitAI让机器人像人一样边看边理解,来自浙江大学和vivo人工智能实验室的研究团队带来了新进展。正如视频所展示的,机器人在复杂的室内环境中不仅能自主探索,还具备...

Win10桌面/手机版最深层次开发功能挖掘

IT之家讯 Win10开发者预览版为我们提供了一个Win10大框架的早期概览,使开发者与热心用户都可以提前感受Win10带来的新特性,尝试新工具,而作为开发者,最关心的莫过于Windows多平台通用应...

Django 官方推荐的姿势:类视图(django类视图和函数视图哪个好)

作者:HelloGitHub-追梦人物在开发网站的过程中,有一些视图函数虽然处理的对象不同,但是其大致的代码逻辑是一样的。比如一个博客和一个论坛,通常其首页都是展示一系列的文章列表或者帖子列表。对处理...

Shopee新手指南:Shopee卖家中心用户界面介绍

1.Shopee各站点前台网页链接:2.Shopee各站点后台网页链接3.Shopee APP下载:安卓版下载链接:https://pan.baidu.com/s/1eSp8M1k#list/path...