Flutter进阶组件(2):CheckboxListTile(复选框列表项)

news/2024/12/26 9:43:23/文章来源:https://www.cnblogs.com/linuxAndMcu/p/18631949

CheckboxListTile是一个特殊的ListTile,它内嵌了一个复选框(Checkbox)。这使得它非常适合用来创建一个带有标题和可选复选框的列表项,常用于设置界面或需要用户选择多个选项的场景。

一、属性

CheckboxListTile组件提供了以下属性,以支持各种自定义需求:

  • title: 显示的标题,通常是一个Text Widget。
  • subtitle: 显示的副标题,也可以是一个Text Widget。
  • value: 表示复选框当前是否被选中。
  • onToggle: 当复选框的值改变时调用的回调函数。
  • activeColor: 复选框激活时的颜色。
  • secondary: 显示在标题旁边的Widget,如图标或图片。
  • isThreeLine: 决定是否显示三行文本,如设置为true,则副标题会换行显示。
  • dense: 是否减少列表项的高度,使文字更紧凑。
  • contentPadding: 控制内边距。

二、基本使用

创建一个基本CheckboxListTile的示例:

import 'package:flutter/material.dart';void main() {runApp(const MaterialApp(debugShowCheckedModeBanner: false,home: CheckboxPage(),));
}class CheckboxPage extends StatefulWidget {const CheckboxPage({super.key});@overrideState<CheckboxPage> createState() => _CheckboxPageState();
}class _CheckboxPageState extends State<CheckboxPage> {final List<bool> _selectedValues = [false, false, false];@overrideWidget build(BuildContext context) {return Scaffold(appBar: AppBar(title: const Text('Checkbox Example'),),body: Column(mainAxisAlignment: MainAxisAlignment.center,children: [CheckboxListTile(title: const Text('Option 1'),value: _selectedValues[0], // 当前复选框的值,表示是否选中           onChanged: (value) { // 复选框状态改变时调用的回调setState(() {_selectedValues[0] = value!;});},),CheckboxListTile(title: const Text('Option 2'),value: _selectedValues[1],           onChanged: (value) {setState(() {_selectedValues[1] = value!;});},),CheckboxListTile(title: const Text('Option 3'),value: _selectedValues[2],           onChanged: (value) {setState(() {_selectedValues[2] = value!;});},),],),);}
}
  • 在上面的示例中,我们创建了一个名为CheckboxPage的有状态(stateful)小部件。该页面包含了三个复选框,用于选择不同的选项。复选框的选择状态通过_selectedValues列表进行控制,并在状态改变时使用setState进行更新。

  • 我们使用CheckboxListTile组件创建了复选框,并在每个复选框中设置了标题和初始的选中状态。onChanged回调函数在复选框状态改变时被调用,并通过setState更新选择的状态。

运行这个示例,您将看到三个复选框在页面上显示,并且可以通过点击复选框来切换它们的选中状态。效果图如下所示:

Flutter_checkBox_C.png


三、高级用法

CheckboxListTile可以与图标、副标题等结合使用,创建复杂的列表项:

class _CheckboxPageState extends State<CheckboxPage> {final List<bool> _selectedValues = [false, false, false];@overrideWidget build(BuildContext context) {return Scaffold(appBar: AppBar(title: const Text('Checkbox Example'),),body: Column(mainAxisAlignment: MainAxisAlignment.center,children: [CheckboxListTile(title: const Text('Option 1'),value: _selectedValues[0], // 当前复选框的值,表示是否选中subtitle: const Text('This is a subtitle for the option'),secondary: const Icon(Icons.ac_unit), // 显示在标题旁边的图标            onChanged: (value) { // 复选框状态改变时调用的回调setState(() {_selectedValues[0] = value!;});},),CheckboxListTile(title: const Text('Option 2'),value: _selectedValues[1],subtitle: const Text('This is a subtitle for the option'),secondary: const Icon(Icons.access_alarm), // 显示在标题旁边的图标              onChanged: (value) {setState(() {_selectedValues[1] = value!;});},),CheckboxListTile(title: const Text('Option 3'),value: _selectedValues[2],subtitle: const Text('This is a subtitle for the option'),secondary: const Icon(Icons.access_time), // 显示在标题旁边的图标              onChanged: (value) {setState(() {_selectedValues[2] = value!;});},),],),);}
}

效果图如下所示:

Flutter_checkBox_J.png


四、与ListView结合使用

CheckboxListTile通常与ListView结合使用,创建滚动的复选框列表:

class _CheckboxPageState extends State<CheckboxPage> {final List<bool> _selectedValues = [false, false, false, false, false];@overrideWidget build(BuildContext context) {return Scaffold(appBar: AppBar(title: const Text('Checkbox Example'),),body: ListView(children: List<CheckboxListTile>.generate(5, // 列表中的复选框数量(int index) {return CheckboxListTile(title: Text('Option $index'),value: _selectedValues[index],onChanged: (value) {// 复选框状态改变时调用的回调setState(() {_selectedValues[index] = value!;});});},),));}
}

效果图如下所示:

Flutter_checkBox_K.png


五、自定义CheckboxListTile

你可以通过设置不同的属性来定制CheckboxListTile的外观:

class _CheckboxPageState extends State<CheckboxPage> {final List<bool> _selectedValues = [false, false, false];@overrideWidget build(BuildContext context) {return Scaffold(appBar: AppBar(title: const Text('Checkbox Example'),),body: Column(mainAxisAlignment: MainAxisAlignment.center,children: [CheckboxListTile(title: const Text('Option 1'),subtitle: const Text('This is a custom subtitle'),            value: _selectedValues[0], // 当前复选框的值,表示是否选中activeColor: Colors.green, // 复选框激活时的颜色contentPadding: const EdgeInsets.all(12.0), // 自定义内边距                       onChanged: (value) { // 复选框状态改变时调用的回调setState(() {_selectedValues[0] = value!;});},),],),);}
}

效果图如下所示:

Flutter_checkBox_L.png


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/859178.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

3种常见的数据库迁移工具对比

3种常见的数据库迁移工具对比神州数码云基地​已认证账号​关注2 人赞同了该文章之前在项目中,收到一个紧急需求,要把数据从 PostgreSQL 迁移到 TiDB 中。由于时间紧任务重,来不及调研高效的方式,直接使用了 Navicat 内置的功能,把数据从 PostgreSQL 迁移到了 TiDB。 项…

img标签的onerror事件有什么作用?

onerror 是 HTML <img> 标签的一个事件属性,它用于指定当图像加载出现错误时执行的 JavaScript 代码。如果指定的图像文件不存在、无法访问,或者由于某种原因无法正确加载到页面上,就会触发这个事件。 例如,你可以使用 onerror 事件来提供一个备用的图像,以便在原图…

java基础3

异常 Java 异常类层次结构图概览:Exception 和 Error 有什么区别? 在 Java 中,所有的异常都有一个共同的祖先 java.lang 包中的 Throwable 类。Throwable 类有两个重要的子类:Exception :程序本身可以处理的异常,可以通过 catch 来进行捕获。Exception 又可以分为 Checked …

12-26 工作笔记

1. 从已有的PCB制作封装库得到下面的内容,代表成功了。

业务系统文件安全上传 如何做到安全合规?

业务系统文件安全上传的业务场景,主要是指金融、医疗、能源、政府机构等,内部各类业务系统(例如:OA、供应商管理系统、客户管理系统、客服系统、风控系统等)面向大量终端用户提供服务时,往往需要终端用户上传各类文件附件。 这种业务场景面临的主要挑战包括: 1、安全威…

Byrutor,俄罗斯最大游戏破解资源站|中文

Byrutor是一个源自俄罗斯的游戏下载网站,提供大量最新和经典的游戏资源,几乎涵盖了Steam等主流平台的内容。用户可以通过搜索或浏览找到自己喜欢的游戏,并通过BT种子下载游戏资源。该平台支持多种语言,包括俄语和英语,并且每天更新内容,确保用户能够获取最新的游戏资源。…

销冠秘籍:人脉拓展

在人生的旅途中,人脉往往扮演着至关重要的角色。如果你的朋友众多,人际关系广泛,善于建立和维护关系,那么业务的拓展自然会水到渠成。然而,现实生活中的人脉构建并非易事,它需要我们用心去经营,去维护。 自我价值:人脉的基石 初入职场时,我曾被老板告诫:年轻人不要过…

未发现数据源名称并且未指定默认驱动程序

如果遇到类似“未发现数据源名称并且未指定默认驱动程序”的错误提示,通常是因为系统找不到指定的ODBC驱动程序。此时建议检查以下几个方面:确认驱动程序已正确安装:通过控制面板中的“管理工具” -> “ODBC数据源”查看是否列出了所需的MySQL ODBC驱动程序。 验证驱动程…

虚拟主机上本地连接数据库非常缓慢,应该如何排查和优化?

当在虚拟主机环境中遇到本地连接数据库变得非常缓慢的情况时,这不仅影响用户体验,还可能导致业务流程中断。因此,迅速有效地排查并解决这个问题至关重要。下面我们将详细介绍如何一步步排查导致数据库连接变慢的原因,并提供一些实用的优化建议。 首先,需要明确的是,“本地…

远程SSH无法登录,重置密码无效,该如何处理?

当遇到远程SSH无法登录且重置密码无效的情况时,这往往意味着存在较为复杂的安全或配置问题。这类问题不仅会影响日常运维工作,还可能暗示着潜在的安全风险。因此,必须谨慎对待并尽快找出根本原因加以修复。接下来,我们将详细介绍如何诊断和解决此类问题的方法。 首先要认识…

网站二级页面无法完整显示怎么办?

确认程序内部伪静态及插件设置是否正确。 检查服务器日志,查看是否有相关错误信息。 尝试清除浏览器缓存或使用不同浏览器访问,排除客户端问题。非常感谢您长期对我们服务的支持!扫码添加技术【解决问题】专注中小企业网站建设、网站安全12年。熟悉各种CMS,精通PHP+MYSQL、…

客户反馈无法访问网站怎么办?

让客户尝试更换不同浏览器访问,排除浏览器兼容性问题。 建议客户重启本地路由器或重新拨号后再次访问。 提供客户的IP地址,我们将在服务器端进行核查,确认是否存在拦截情况。扫码添加技术【解决问题】专注中小企业网站建设、网站安全12年。熟悉各种CMS,精通PHP+MYSQL、HTML…