Flutter 自定义单选按钮和自定义复选框

2023-11-11

Flutter 自定义单选按钮和自定义复选框


前言

在日常开发中,很多时候系统自带的单选按钮,复选框无法满足我们的需求,那么就需要自定义样式的按钮,本篇文章将记录如何自定义单选按钮,复选框。


一、自定义单选按钮

  1. 在自定义单选按钮之前,我们先初始化数据
  List radioList = [
    {"title": "单选1", "isSelect": false},
    {"title": "单选2", "isSelect": false},
    {"title": "单选3", "isSelect": false},
    {"title": "单选4", "isSelect": false},
  ];

  1. 开始布局,我这里使用List.generate 自动循环生成组件
  static Widget bodyWidget(HomePageViewModel model) {
    return Padding(
      padding: const EdgeInsets.all(30),
      child: Column(
        children: List<Widget>.generate(model.radioList.length,
            (index) => radioWidget(model.radioList[index], index, model)),
      ),
    );
  }
  1. 单选按钮的样式属性,并且在每次触发点击事件的时候,使用循环遍历的方式,将状态初始化成未选中,再根据当前选中的下标index 实现按钮选中功能。
  static Widget radioWidget(item, int index, HomePageViewModel model) {
    return GestureDetector(
      onTap: () {
        for (var radio in model.radioList) {
          radio["isSelect"] = false;
        }
        model.radioList[index]["isSelect"] = true;
        model.notifyListeners();
      },
      child: Row(
        children: [
          Container(
            width: 30,
            height: 30,
            alignment: Alignment.center,
            decoration: BoxDecoration(
              color: Colors.white,
              borderRadius: BorderRadius.all(
                Radius.circular(15),
              ),
              border: Border.all(
                width: 1,
                color: Colors.grey.shade300,
              ),
            ),
            child: Container(
              width: 15,
              height: 15,
              decoration: BoxDecoration(
                color: item["isSelect"] ? Colors.green : Colors.transparent,
                borderRadius: BorderRadius.all(
                  Radius.circular(7.5),
                ),
              ),
            ),
          ),
          const SizedBox(
            width: 10,
          ),
          Text(item["title"]),
        ],
      ),
    );
  }

接下来我们来看一下运行效果:

在这里插入图片描述

二、自定义复选框

关于复选框,还是单选框,其实最主要的不同就是,在选择之后,数据的操作,我们修改上面单选按钮中点击事件中的代码

        model.radioList[index]["isSelect"] = !item["isSelect"];
        model.notifyListeners();

改动很简单,不多赘述,看一下完整代码

  static Widget checkWidget(item, int index, HomePageViewModel model) {
    return GestureDetector(
      onTap: () {
        model.radioList[index]["isSelect"] = !item["isSelect"];
        model.notifyListeners();
      },
      child: Row(
        children: [
          Container(
            width: 30,
            height: 30,
            alignment: Alignment.center,
            decoration: BoxDecoration(
              color: Colors.white,
              borderRadius: BorderRadius.all(
                Radius.circular(6),
              ),
              border: Border.all(
                width: 1,
                color: Colors.grey.shade300,
              ),
            ),
            child: item["isSelect"]
                ? Icon(
                    Icons.call_missed_outgoing_rounded,
                    color: Colors.red,
                    size: 24,
                  )
                : Container(),
          ),
          const SizedBox(
            width: 10,
          ),
          Text(item["title"]),
        ],
      ),
    );
  }

运行效果:

在这里插入图片描述


总结

本篇文章的记录就到这里了,很多时候我们不知道,在一门语言中的单选或者复选框的自定义样式该怎么做,只是我们的思路的没有转变过来,其实重要的不是样式,而是数据的改变。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Flutter 自定义单选按钮和自定义复选框 的相关文章

随机推荐

  • 《30天自制操作系统》笔记(02)——导入C语言

    30天自制操作系统 笔记 02 导入C语言 进度回顾 在上一篇 记录了计算机开机时加载IPL程序 initial program loader 一个nas汇编程序 的情况 包括IPL代码 helloos nas 编译生成helloos im
  • C++学习(七十五)有关Orekit

    Orekit ORbits Extrapolation KIT 是一款占用空间少的低层空间动力学 Java 库 它提供基础的元素 比如轨道 日期 属性和框架 和多种算法支持转换 分析和数值传递 Orekit 是纯 Java 库 运行时只依赖
  • 《C++11标准库》4.3.1标准的 Exception Class(异常类)

    所有被语言本身或标准库抛出的异常 都派生自基类 exception 定义于
  • 北大肖臻老师<<区块链技术>>笔记1

    课程的大纲 密码学基础 比特币的数据结构 共识协议和系统实现 挖矿算法和难度调整 比特币的脚本 软分叉和硬分叉 匿名和隐私保护 以太坊是后面的 首先是密码学基础的学习 crypto currency 虚拟货币 是不加密的 区块链上所有的教以
  • Cesium-terrain-builder(CTB)在Centos7中安装并生成地形数据

    Cesium terrain builder CTB 在Centos7中安装并生成地形数据 前言 步骤 安装docker 下载镜像并创建容器 生成地形数据 总结 前言 1 使用docker镜像 homme cesium terrain bu
  • linux运行appimage,技术

    你有没有下载过 AppImage 文件 而你不知道如何使用它 或许你可能知道如何使用它 但是你每次要运行它时必须要进入到下载了该 AppImage 的文件夹中来运行它 或者手动为其创建启动程序 使用 AppImageLauncher 这些就
  • 基于Open3D的点云处理5-点云之间的距离计算

    计算在一片点云中的每一个点在另一片点云中最近点的距离 常规写法 通过k d Tree进行搜索每个点的最近点 k idx dist k dTree search knn vector 3d pc2 points i k 通过k d Tree进
  • 万物分割SAM家族 越发壮大!HQ-SAM、FastSAM 和 FasterSAM(MobileSAM)

    卧剿 6万字 30个方向130篇 CVPR 2023 最全 AIGC 论文 一口气读完 1 更高质量 Segment Anything in High Quality 最近的 Segment Anything Model SAM 代表了分割
  • 在 Visual C++ 中以错误的顺序链接 CRT 库和 MFC 库时出现 LNK2005 错误

    症状 当 C 运行时 CRT 库和 Microsoft 基础类 MFC 库的链接顺序有误时 可能会出现以下 LNK2005 错误之一 nafxcwd lib afxmem obj error LNK2005 void cdecl opera
  • 面试用到的 常见SQL语句

    1 有一张shop表 有三个字段article author price 选出每个author的price的最高的纪录 要包含所有字段 解法一 使用相关子查询 SELECT article author price FROM shop s1
  • 数字电路设计之同步时钟采样模块

    同步时钟采样模块 为的是使得外部输入的异步信号需要经过系统时钟的同步化 且将输入的异步信号整形成一个时钟长的脉冲信号 module clk syn clk rst s in s out input wire clk input wire r
  • Python中的类——完美描述现实世界的事物

    Python学习 类 目录 Python学习 类 前言 类的基础语法 定义 构造方法 继承 掠夺 前言 众所周知 现实世界的事物由两部分组成 即属性和行为 类也可以包含属性和行为 所以描述现实世界事物是非常合适的 例如 属性 灰发中分背带裤
  • java之Excel处理工具类

    package com hxy thesis common utils import com hxy thesis ht domain import com hxy thesis xp domain XpUserDO import org
  • 求数组中连续n个元素使其和最大

    给定一个数组 求出数组中连续的一些元素使其和的值最大 如果所有元素都为正数 显然整个数组即为所求的 如果所有元素的值为负数 则所求的最大值为0 这是在编程珠玑上看到的 其时间复杂度由O n3 减为O n 了 public class Max
  • 大数据学习第2天----------------linux 安装mysql 出现安装依赖问题解决(centos7)

    问题 安装mysql过程中出现的依赖 root hadoop mysql 5 7 16 rpm ivh mysql community devel 5 7 16 1 el7 x86 64 rpm warning mysql communit
  • 实录:SUSE服务器下的LVM配置

    SUSE Linux 存储阵列目前是主流应用 根据自己的工程经验 以下总结下suse 服务器下如何使用LVM管理软件进行阵列配置 在SUSE服务器对阵列进行配置一般有两种模式 1 直接使用fdisk 外挂存储设备名 对其进行分区划分 使用f
  • 【Linux】浅谈网络协议栈-网桥br0

    目录 1 什么是桥接 2 linux的桥接实现 3 网桥的功能 4 网桥的配置 1 什么是桥接 简单来说 桥接就是把一台机器上的若干个网络接口 连接 起来 其结果是 其中一个网口收到的报文会被复制给其他网口并发送出去 以使得网口之间的报文能
  • 计算机软件研究方法与技术路线,研究方法与技术路线

    研究方法与技术路线 由会员分享 可在线阅读 更多相关 研究方法与技术路线 2页珍藏版 请在人人文库网上搜索 1 1 研究方法1 实地调查法 在凤阳县地区和安徽科技学院附近分别进行调查 实地了解凤阳县中小企业对财会人员的需求及招聘要求 2 问
  • 第38.2节 osg加载大tif-10.20活动直播资源&中秋活动参赛源码

    目录 本节内容 本节内容 根据2021 10 20直播活动的内容 使用VPB处理影像高程的示例 将资源进行打包 里面使用的是VS2019 若使用其它版本的VS 则需要对应的OSG编译包 则在此链接获取 osgChina权威发布 vs各版本第
  • Flutter 自定义单选按钮和自定义复选框

    Flutter 自定义单选按钮和自定义复选框 前言 一 自定义单选按钮 二 自定义复选框 总结 前言 在日常开发中 很多时候系统自带的单选按钮 复选框无法满足我们的需求 那么就需要自定义样式的按钮 本篇文章将记录如何自定义单选按钮 复选框