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

Flutter 之 ListView(flutter框架)

maynowei7个月前 (08-02)技术知识120

在 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 发布!

相关文章

iOS开发生涯的初恋:详解Objective-C多项改进

CSDN移动将持续为您优选移动开发的精华内容,共同探讨移动开发的技术热点话题,涵盖移动应用、开发工具、移动游戏及引擎、智能硬件、物联网等方方面面。如果您想投稿、参与内容翻译工作,或寻求近匠报道,请发送...

[三菱PLC] 用&quot;C语言&quot;玩转PLC,三菱PLC使用ST语言超详细教程

ST语言,全称为结构化文本(Structured Text),是一种高级编程语言,专为工业自动化和控制系统设计。我们学习PLC一般是用梯形图,梯形图学会后,学习SFC,但是我发现梯形图和SFC虽然简单...

Android之自定义ListView(一)(android 自定义view绘制流程)

PS:自定义View是Android中高手进阶的路线.因此我也打算一步一步的学习.看了鸿洋和郭霖这两位大牛的博客,决定一步一步的学习,循序渐进.学习内容:1.自定义View实现ListView的Ite...

C++并发同步核心-mutex深度解析:守护共享数据的关键

在多线程编程中,当多个线程需要访问和修改共享数据时,如果没有任何同步机制,就可能发生数据竞争(Data Race),导致程序行为不可预测、数据损坏甚至崩溃。C++标准库通过<mutex>头...

Oracle中泄露“天机”的TNS(在oracle中发出的下列查询)

数据库的安全是长期存在的问题。在目前大量的数据泄露事件以及漏洞面前,大家看到的大都是SQl注入、越权操作、缓冲区溢出等这些具体漏洞。往往却忽视了造成这些问题的前提,黑客想要入侵数据库一定会尝试获取数据...

见招拆招:破解Oracle数据库密码(oracle数据库如何解锁)

一.概要本文主要目的,希望通过分享解密方法引起相关人士对网络安全的重视。数据库安全绝不单只数据库本身的安全,和数据库所处的整个环境都有密切关系。本文所说的破解oracle9i、oracle10g、or...