【Flutter 组件】005-基础组件:单选、开关和复选框

【Flutter 组件】005-基础组件:单选、开关和复选框

文章目录

  • 【Flutter 组件】005-基础组件:单选、开关和复选框
  • 一、概述
  • 二、基本使用
    • 1、开关
      • 代码示例
      • 运行结果
    • 2、复选框
      • 代码示例
      • 运行结果
    • 3、多个选项单选
      • 代码示例
      • 运行结果
    • 4、多个选项多选
      • 代码示例
      • 运行结果

一、概述

Material 组件库中提供了 Material 风格的单选开关 Switch 和复选框 Checkbox,虽然它们都是继承自 StatefulWidget,但它们本身不会保存当前选中状态,选中状态都是由父组件来管理的。当SwitchCheckbox被点击时,会触发它们的onChanged回调,我们可以在此回调中处理选中状态改变逻辑。

当需要实现多个选项的单选功能时,可以使用 RadioRadioListTile组件。这些组件允许用户在一组选项中选择一个。

二、基本使用

1、开关

代码示例

import 'package:flutter/material.dart';class HomePage extends StatefulWidget {const HomePage({super.key});State<HomePage> createState() => HomePageState();
}class HomePageState extends State<HomePage> {bool _value = false;Widget build(BuildContext context) {return Container(color: Colors.white,child: Center(child: Switch(value: _value,activeColor: Colors.black,onChanged: (bool newValue) {setState(() {_value = newValue;});},),),);}
}

运行结果

screenshots_danxuankuang

2、复选框

代码示例

import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';class HomePage extends StatefulWidget {const HomePage({super.key});State<HomePage> createState() => HomePageState();
}class HomePageState extends State<HomePage> {bool _value1 = false;bool _value2 = false;bool _value3 = false;bool _value4 = false;Widget build(BuildContext context) {return Container(color: Colors.white,child: Column(children: [Checkbox(value: _value1,onChanged: (bool? newValue) {setState(() {_value1 = newValue!;});},),CheckboxListTile(title: const Text('Checkbox 2'),value: _value2,onChanged: (bool? newValue) {setState(() {_value2 = newValue!;});},),CheckboxMenuButton(value: _value3,onChanged: (bool? newValue) {setState(() {_value3 = newValue!;});},child: const Text('Checkbox 3')),CupertinoCheckbox(value: _value4,onChanged: (bool? newValue) {setState(() {_value4 = newValue!;});},),],),);}
}

运行结果

screenshots_duoxuan

3、多个选项单选

代码示例

import 'package:flutter/material.dart';class HomePage extends StatefulWidget {const HomePage({super.key});State<HomePage> createState() => HomePageState();
}class HomePageState extends State<HomePage> {String? _selectedOption;Widget build(BuildContext context) {return Container(color: Colors.white,child: Column(crossAxisAlignment: CrossAxisAlignment.start,children: [RadioListTile<String>(title: const Text('Option 1'),value: 'Option 1',groupValue: _selectedOption,onChanged: (String? newValue) {setState(() {_selectedOption = newValue;});},),RadioListTile<String>(title: const Text('Option 2'),value: 'Option 2',groupValue: _selectedOption,onChanged: (String? newValue) {setState(() {_selectedOption = newValue;});},),RadioListTile<String>(title: const Text('Option 3'),value: 'Option 3',groupValue: _selectedOption,onChanged: (String? newValue) {setState(() {_selectedOption = newValue;});},),],),);}
}

运行结果

danxuan

4、多个选项多选

代码示例

import 'package:flutter/material.dart';class HomePage extends StatefulWidget {const HomePage({super.key});State<HomePage> createState() => HomePageState();
}class HomePageState extends State<HomePage> {final List<String> _selectedOptions = [];Widget build(BuildContext context) {return Container(color: Colors.white,child: Column(crossAxisAlignment: CrossAxisAlignment.start,children: [CheckboxListTile(title: const Text('Option 1'),value: _selectedOptions.contains('Option 1'),onChanged: (bool? value) {setState(() {if (value != null && value) {_selectedOptions.add('Option 1');} else {_selectedOptions.remove('Option 1');}});},),CheckboxListTile(title: const Text('Option 2'),value: _selectedOptions.contains('Option 2'),onChanged: (bool? value) {setState(() {if (value != null && value) {_selectedOptions.add('Option 2');} else {_selectedOptions.remove('Option 2');}});},),CheckboxListTile(title: const Text('Option 3'),value: _selectedOptions.contains('Option 3'),onChanged: (bool? value) {setState(() {if (value != null && value) {_selectedOptions.add('Option 3');} else {_selectedOptions.remove('Option 3');}});},),],),);}
}

运行结果

screenshots2745634564363463

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

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

相关文章

易微联2.4G通断器添加到手机步骤

蓝牙款无WIFI&#xff0c;不用扫码&#xff0c;按住通断器上的按钮&#xff0c;会先闪一下&#xff0c;再闪两下。闪一下的时候连手机&#xff0c;闪两下清码。 手机上打开易微联app&#xff0c;依次点击加号/轻智能遥控器/单按键遥控器/添加完成。 返回打开刚才添加的开关&a…

图像处理--边缘检测算子

算子推导过程 1、知识引入&#xff1a; 在一维连续数集上有函数f(x),我们可以通过求导获得该函数在任一点的斜率&#xff0c;根据导数的定义有&#xff1a; 在二维连续数集上有函数f(x,y),我们也可以通过求导获得该函数在x和y分量的偏导数&#xff0c;根据定义有&#xff1a; …

升级Xcode14.3,项目无法运行解决

报错&#xff1a;link command failed with exit code 1(use -v to see invocaiton) 原因&#xff1a;新版本Xcode删除了特定目录下的一些文件 解决&#xff1a; post_install do |installer|installer.pods_project.targets.each do |target|target.build_configurations.e…

spring源码分析-ApplicationContext----扩展组件event listener

我们知道 spring中的ApplicationContext在beanFactory(提供基础bean处理)基础上增加了扩展组件&#xff0c;例如国际化&#xff0c;资源&#xff0c;发布事件和监听事件&#xff0c;今天主要针对发布和监听事件做一次源码分析&#xff0c;看到底发布和监听是如何实现的&#xf…

【性能工程】性能比较:REST vs gRPC vs 异步通信

微服务之间的通信方式对微服务架构内的各种软件质量因素有重大影响&#xff08;有关微服务网络内通信的关键作用的更多信息&#xff09;。沟通方式会影响软件的性能和效率等功能性需求&#xff0c;以及可变性、可扩展性和可维护性等非功能性需求。因此&#xff0c;有必要考虑不…

宝塔Panel搭建Python环境

服务器安装python环境 找到软件商店 应用搜索 输入&#xff1a;python 安装Python项目管理器2.4 开启首页显示 回到首页 找到python管理器并点击进入 安装对应的python版本 到这里 服务器就可以告一段落了 在本地开发服务端应用并上传服务器 将写好的python应用 导出依赖…

pytorch学习指南

安装anaconda&#xff1a; https://blog.csdn.net/fan18317517352/article/details/123035625 教程&#xff1a;bilibili up主&#xff1a;一只小土堆 构建pytorch空间 pytorch安装 查看cpu 安装命令pytorch&#xff1a;conda install pytorch torchvision torchaudio cpu…

六大排序——(插入、希尔、选择、交换、归并、计数)

目录 一、插入排序 二、希尔排序 三、选择排序 1&#xff09;直接选择排序&#xff1a; 2&#xff09;堆排序 四、交换排序 1&#xff09;冒泡排序 2&#xff09;快速排序 1、Hoare版 2、挖坑法 3、前后指针 快排优化 快速排序非递归来实现 快排总结 五、归并排…

OpenCV转换HDR图像与源码分析

我们常见的图像位深一般是8bit&#xff0c;颜色范围[0, 255]&#xff0c;称为标准动态范围SDR(Standard Dynamic Range)。SDR的颜色值有限&#xff0c;如果要图像色彩更鲜艳&#xff0c;那么就需要10bit&#xff0c;甚至12bit&#xff0c;称为高动态范围HDR(High Dynamic Range…

Access-Control-Allow-Origin跨域解决及详细介绍

重要声明&#xff1a;本文章仅仅代表了作者个人对此观点的理解和表述。读者请查阅时持自己的意见进行讨论。 首先&#xff0c;跨域不是问题。是一种安全机制。 这是你在开发时、上线前就必须提前考虑到的安全问题并且采取合适的手段去避免这个问题带来的程序错误。不过通常情况…

零拷贝详解

目录 一、什么是零拷贝 二、传统的IO执行流程 三、零拷贝相关的知识点回顾 1、内核空间&用户空间 2、用户态&内核态 3、上下文切换 4、虚拟内存 5、DMA技术 四、零拷贝实现的几种方式 1、mmapwrite实现的零拷贝 2、sendfile实现的零拷贝 3、sendfileDMA sc…

【若依】框架搭建,前端向后端如何发送请求,验证码的实现

若依框架 若依框架&#xff08;Ruoyi&#xff09;是一款基于Spring Boot和Spring Cloud的开源快速开发平台。它提供了一系列的基础功能和通用组件&#xff0c;能够帮助开发者快速构建企业级应用。若依框架采用了模块化的设计理念&#xff0c;用户可以选择需要的功能模块进行集…