当前位置: 首页 > news >正文

Flutter ListView 实现不同样式 item

        我们在实际开发中会创建显示不同类型内容的列表。以下是使用 Flutter 创建此类结构的方法:

       1. 创建包含不同类型项目的数据源。

        2. 将数据源转换为小部件列表。

创建包含不同类型项目的数据源

项目类型

要表示列表中不同类型的项目,请为每种类型的项目定义一个类。

abstract class ListItem {Widget buildTitle(BuildContext context);Widget buildSubTitle(BuildContext context);
}class HeadingItem implements ListItem {final String heading;HeadingItem(this.heading);@overrideWidget buildTitle(BuildContext context) {return Text(heading,style: Theme.of(context).textTheme.headlineSmall,);}@overrideWidget buildSubTitle(BuildContext context) {return const SizedBox.shrink();}
}class MessageItem implements ListItem {final String sender;final String body;MessageItem(this.sender, this.body);@overrideWidget buildTitle(BuildContext context) {return Text(sender);}@overrideWidget buildSubTitle(BuildContext context) {return Text(body);}
}

 创建项目列表

大多数情况下,会从互联网或本地数据库获取数据,然后将该数据转换为项目列表。

  final items = List<ListItem>.generate(1000, (i) =>i % 6 == 0 ? HeadingItem('Heading $i') : MessageItem('Sender $i', 'Message body $i'));

 要将每个项目转换为小部件,请使用 ListView.builder() 构造函数。

通常,提供一个构建器函数来检查您正在处理的项目类型,并返回适合该项目类型的小部件。

        child: ListView.builder(itemBuilder: (BuildContext context, int index) {final item = items[index];return ListTile(title: item.buildTitle(context),subtitle: item.buildSubTitle(context),);},itemCount: items.length),

 

相关文章:

  • 【HTML】模拟插头连接断开动画
  • 复杂的编辑表格
  • Oracle SQL - 合并重叠的期间
  • 如何选择最佳路线?
  • sql盲注python脚本学习 (基于bWAPP靶场)
  • 谈谈hash算法
  • Leetcode-day31-01背包问题
  • 《Programming from the Ground Up》阅读笔记:p103-p116
  • Linux内核定时器
  • Java--Zuul网关中的过滤器
  • AIGC深度学习教程:Transformer模型中的Position Embedding实现与应用
  • IO与进程
  • 通信系统收发原理冷知识
  • Datawhale X 李宏毅苹果书 AI夏令营(深度学习入门)taks2
  • 跟《经济学人》学英文:2024年08月24日这期 What to make of America’s topsy-turvy economy
  • canvas 五子棋游戏
  • hadoop集群管理系统搭建规划说明
  • If…else
  • jdbc就是这么简单
  • mysql中InnoDB引擎中页的概念
  • PhantomJS 安装
  • React中的“虫洞”——Context
  • UEditor初始化失败(实例已存在,但视图未渲染出来,单页化)
  • vuex 学习笔记 01
  • 编写高质量JavaScript代码之并发
  • 从setTimeout-setInterval看JS线程
  • 深入浏览器事件循环的本质
  • 使用SAX解析XML
  • 小程序开发中的那些坑
  • ​【数据结构与算法】冒泡排序:简单易懂的排序算法解析
  • ​总结MySQL 的一些知识点:MySQL 选择数据库​
  • # Java NIO(一)FileChannel
  • #Lua:Lua调用C++生成的DLL库
  • #QT(一种朴素的计算器实现方法)
  • #我与Java虚拟机的故事#连载13:有这本书就够了
  • $GOPATH/go.mod exists but should not goland
  • (7) cmake 编译C++程序(二)
  • (8)Linux使用C语言读取proc/stat等cpu使用数据
  • (附源码)ssm考试题库管理系统 毕业设计 069043
  • (附源码)计算机毕业设计ssm-Java网名推荐系统
  • (十一)手动添加用户和文件的特殊权限
  • (四)搭建容器云管理平台笔记—安装ETCD(不使用证书)
  • (四)进入MySQL 【事务】
  • (转)程序员疫苗:代码注入
  • .JPG图片,各种压缩率下的文件尺寸
  • .NET “底层”异步编程模式——异步编程模型(Asynchronous Programming Model,APM)...
  • .NET 项目中发送电子邮件异步处理和错误机制的解决方案
  • .xml 下拉列表_RecyclerView嵌套recyclerview实现二级下拉列表,包含自定义IOS对话框...
  • /dev/sda2 is mounted; will not make a filesystem here!
  • @Service注解让spring找到你的Service bean
  • [ C++ ] template 模板进阶 (特化,分离编译)
  • [ 渗透测试面试篇 ] 渗透测试面试题大集合(详解)(十)RCE (远程代码/命令执行漏洞)相关面试题
  • [.net] 如何在mail的加入正文显示图片
  • [20180129]bash显示path环境变量.txt
  • [8481302]博弈论 斯坦福game theory stanford week 1