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

news2024/11/25 8:13:55

【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.coloradmin.cn/o/718817.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

一次源码编译安装PostgreSql失败

需要perl&#xff1b;之前博文已提到&#xff1b;之前有一种编程语言叫perl&#xff0c;此perl应该不是那个&#xff1b;可到其官网下载&#xff0c;Perl Download - www.perl.org 安装时添加到环境变量&#xff1b; 可能是一个东西&#xff1b;有编程语言和工具&#xff1b;大…

怎样愉快的使用串口发送16进制数据并读取串口内容

像雷达 imu 陀螺仪一类的传感器&#xff0c;一般都是用的usb转串口和主机连接&#xff0c;然后通过串口读取传感器数据&#xff0c;串口是我们绕不过的一道坎&#xff0c;那我们就来继续手撕串口。 串口连接主机问题看上篇&#xff1a; 怎样愉快的连接使用usb转串口设备_JT_B…

WalxPlugin免Root框架使用详解和示例代码

2023年7月4日首发 WalxPlugin框架&#xff08;以下简称WP框架&#xff09;是一个不需要root权限就能使用的插件化模块&#xff0c;能够轻松实现在非root设备hook其它应用的调用和访问进程数据等功能。目前该框架已发布测试版。 一.WP框架工具包提供了以下几个模块&#xff1a…

5.8.5 TCP可靠传输(一)序号确认机制

5.8.5 TCP可靠传输&#xff08;一&#xff09;序号确认机制 TCP是可靠的传输层协议&#xff0c;主要通过序号确认机制、超时重传机制、定时器三个方面实现可靠传输。 一、序号确认机制 TCP将所要传送的整个的应用层报文看成是一个一个字节组成的数据流&#xff0c;并对每一个…

Cyclo(-Ala-Tyr),21754-26-7,环(丙氨酸-酪氨酸)二肽,由两个氨基酸通过肽键环合形成

&#xff08;文章资料汇总&#xff1a;陕西新研博美生物科技有限公司小编MISSwu&#xff09;​ 【产品描述】 Cyclo(-Ala-Tyr)&#xff0c;环(丙氨酸-酪氨酸)二肽&#xff0c;环二肽由两个氨基酸通过肽键环合形成&#xff0c;在氢键相互作用驱动下具有较强的自组装倾向&#x…

python的作用域、globals()-全局变量 和 locals()-局部变量

目录 查看全局变量和局部变量 变量解析规则 变量生存周期 在python中&#xff0c;函数会创建一个自己的作用域&#xff0c;也称为为命名空间。当我们在函数内部访问某个变量时&#xff0c;函数会优先在自己的命名空间中寻找。 我们自己定义的全局变量均在python内建的globa…

java项目linux启动文件

更改jar包名称和jar包所在目录 JAR包名称 替换成自己的项目包名称 JAR包所在目录替换成自己的jar包所在的目录 这里面的字符建议手打到服务器文件内&#xff0c;复制粘贴的话可能存在特殊符号 ps -ef|grep java SERVICE_PID$(ps aux | grep JAR包名称 | grep -v grep | awk…

influxDB聚合类函数

influxDB聚合类函数 1&#xff09;count()函数 返回一个&#xff08;field&#xff09;字段中的非空值的数量。 SELECT COUNT(<field_key>) FROM <measurement_name> [WHERE <stuff>] [GROUP BY <stuff>] 例子1 计算非空water_level数量SELECT COUN…

Web3 处理智能合约部署到本地区块链,并在本地进行测试

上文 Web3 在Truffle项目中编写出自己的第一个solidity智能合约我们演示了 在Truffle环境下写一个智能合约并编译的功能 编译出的文件夹中的这个JSON就非常重要了 我们就可以通过 它这个ABI链接到需要的智能合约程序上去 但这也仅仅是编译完了 我们的智能合约还没有部署到我们…

gma 2 教程(一)概述:2.GMA 安装

依赖环境 系统环境 【操作系统】&#xff1a;64位&#xff08;amd64&#xff09;Windows、Linux 【内存】&#xff1a;≥8 GBPython 环境 【Windows】&#xff1a;3.8.8~3.11 【Linux】&#xff1a;3.9~3.11 目前不支持MacOS和其他平台。建议安装Anaconda创建Python环境。Anac…

解决postman接口自动化测试中登录后401权限问题

大家在做接口自动化测试的时候&#xff0c;碰到有登录的系统应该都会遇到401权限的问题&#xff0c;下面我来说下如何解决这个问题。 首先需要了解问题的本质&#xff0c;是要解决什么&#xff1f;这样我们才好对症下药&#xff0c;报401是因为用户在登录的时候&#xff0c;服务…

亚马逊云科技让AI开发速度更快,门槛更低

过去只有大型科技公司、政府机构和大学才有能力和时间、金钱去部署生成式AI能力。近二十年来&#xff0c;云服务把计算的门槛降低了。亚马逊云科技全球产品副总裁Matt Wood博士表示&#xff1a;“我们希望在生成式AI上做同样的事&#xff0c;把技术提供到每个开发者和商业用户的…

kaggle免费服务器全攻略

1. kaggle服务器16G显卡一周40小时. 所以我们直接干一堆谷歌账号即可 2. 谷歌账号的注册: 我们需要FQcolab for windows可以做到. 然后我们注册好账号后.我们注册4个账号. 注册方法. 打开chrome 点最下面的添加按钮.然后一直下一步即可.无脑注册. 3. 为Chrome多账户添加单独的…

机器人制作开源方案 | 立式铣床模型

1. 功能说明 铣床主要是指用铣刀在工件上加工多种表面的机床&#xff0c;本文示例将通过程序控制模拟铣床的运动效果--模拟铣床进行加工时各个结构的运动方式。铣床的运动主要包括&#xff1a;主轴的旋转运动、立铣头的上下进给运动、工作台的前后左右进给运动。 2. 结构说明 该…

期权专业知识常用术语有哪些?虚值期权和实值期权怎么选择合理的执行价

【1】美式期权&#xff1a;每个交易日都可以行权的期权 【2】欧式期权&#xff1a;只有在到期日才可以执行的期权 【3】平值期权&#xff1a;内在价值为零或极小的期权&#xff0c;或行权价格等于或接近于标的物合约市场价格的期权。通常是指行权价格最接近标的合约市场价格的期…

JavaEE语法之第二章、多线程(初阶三)

目录 一、多线程带来的风险-线程安全 (重点) 1.1观察线程不安全 1.2线程安全的概念 1.3线程不安全的原因 1.3.1抢占式执行&#xff08;进程的随机调度&#xff09; 1.3.2多个线程修改同一个变量 1.3.3内存的可见性 1.3.4原子性 1.3.5指令重排序 二、解决之前的线程不…

Spring Boot 中的 @Query 注解是什么,原理,如何使用

Spring Boot 中的 Query 注解是什么&#xff0c;原理&#xff0c;如何使用 在 Spring Boot 中&#xff0c;Query 注解是一个非常常用的注解&#xff0c;用于定义自定义查询语句。本文将介绍 Query 注解的作用、原理和使用方法。 1. Query 注解的作用 在 Spring Boot 中&#…

【论文精读】《Classifying User Activities in the Encrypted WeChat Traffic》

Classifying User Activities in the Encrypted WeChat Traffic Authors:Chengshang Hou,Junzheng Shi,Cuicui Kang,Zigang Cao,Xiong Gang Journal:2018 IEEE 37th International Performance Computing and Communications Conference (IPCCC) (2018) 摘要 加密移动应用程序…

【算法】从记忆化搜索到递推——动态规划入门

文章目录 笔者说&#xff1a;我们为什么要学记忆化搜索&#xff1f;预备知识例题&#xff1a;198. 打家劫舍记忆化搜索 相关题目练习70. 爬楼梯记忆化搜索dp 746. 使用最小花费爬楼梯记忆化搜索dp 2466. 统计构造好字符串的方案数记忆化搜索dp 213. 打家劫舍 II记忆化搜索dp 笔…

unity + python socket通信,自定义数据包

unity和python相互之间通过socket通信来发送自定义数据包是一个利用unity构建场景和通过python来做数据处理的方式&#xff0c;能够有效的利用两种不同语言的优势。 我已经将对应的操作封装为对应的一个模块&#xff0c;SocketTools.cs&#xff0c;我们先来看一下具体的代码用…