第八十八回:创建一个调色板

文章目录

  • 概念介绍
  • 实现方法
    • 整体思路
    • 具体步骤
  • 示例代码

我们在上一章回中介绍了打印日志相关的内容,本章回中将介绍 如何创建一个调色板.闲话休提,让我们一起Talk Flutter吧。

概念介绍

我们在本章回中介绍的调色板是一个具有各种颜色的窗口,点击不同的颜色就会输出不同的数值。这么介绍比较抽象,下面是程序的运行效果图。
在这里插入图片描述

实现方法

整体思路

使用GridView创建网格状的布局,布局中的每个小组件充当调色板中的某一个颜色板,颜色板的数量由List控制,颜色使用随机数生成;各个颜色板之间保持一定的间隔,这样便于识别。颜色板可以被选择或者点击,点击后可以获得响应。

具体步骤

调色板主要是通过GridView实现的,重点是它的gridDelegate属性,通过该属性可以控制调色板整体的形状与布局。下面是具体的实现方法:

  1. 创建GridView组件,并且给它的gridDelegate属性和children属性赋值;
  2. 在gridDelegate属性中设置主轴中子组件的数量,宽高比,以及组件之间的边距;
  3. 在children属性中通过List设置子组件,子组件是TextButton,上面显示List的索引值;
  4. 在TextButton的onPressed属性中通过日志打印出数值,这个数值是当前元素在列表中的索引值;
  5. 在TextButton外面包一个Container组件,用来控制背景颜色,颜色使用随机数生成,这样会产生不同的颜色;
  6. 在GridView组件外面包一个Padding组件,主要用来控制画板左右的两边的边距,边距值与子组件之间的边距值相等;

示例代码

///使用GirdView的构造方法创建GirdView,主要是gridDelegate属性是必选属性
class ColorPaletteByGridView extends StatelessWidget {
  const ColorPaletteByGridView({
    super.key,
  });

  
  Widget build(BuildContext context) {
    return Padding(
      ///list中无法添加最左和最右侧的边距,通过padding添加
      // padding: const EdgeInsets.all(8.0),
      padding: const EdgeInsets.only(left: 8.0,right: 8.0),
      child: GridView(
        gridDelegate: const SliverGridDelegateWithFixedCrossAxisCount(
          ///主轴中组件的数量
          crossAxisCount: 3,
          ///宽高比
          childAspectRatio: 1.8,
          ///主轴和交叉轴的边距
          mainAxisSpacing: 8,
          crossAxisSpacing: 8,
        ),
        children: List.generate(45, (index) {
          return Container(
            child: Center(
              ///使用按钮来响应事件
              child: TextButton(
                onPressed: ()=>print('$index clicked'),
                ///文本使用索引值
                child: Text('$index',style: TextStyle(color: Colors.white),),),
            ),
            ///颜色使用随机数生成
            color: Color.fromARGB(255, Random().nextInt(256), Random().nextInt(256), Random().nextInt(256)),);
        }),
      ),
    );
  }
}

上面的代码把整个实现过程封装成了一个Widget,这样方便项目管理,把该Widget赋值给Scaffold的body属性后就可以运行。我们在代码中添加了详细的注释,方便大家理解代码,不过还有一些细节需要补充:

  • gridDelegate属性控制了整个GridView的整体布局风格,具体的需求由项目决定;
  • GridView的子组件可以依据项目需求决定,简单起见,示例代码中使用了TextButton;
  • 子组件之间的边距值和GridView左右两侧的边距值依据项目需求决定,不过最好让它们保持相等;

看官们,关于"如何创建调色板"相关的内容就介绍到这里,欢迎大家在评论区交流与讨论!

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Taurus .Net Core 微服务开源框架:Admin 插件【4-3】 - 配置管理-Mvc【Plugin-MicroService 微服务】

目录 1、系统配置节点:Mvc - Plugin - MicroService 配置界面:注册中心 2、系统配置节点:Mvc - Plugin - MicroService 配置界面:注册中心(从) 3、系统配置节点:Mvc - Plugin - MicroService…

【C语言初阶(18)】结构体

文章目录 前言Ⅰ结构体的声明Ⅱ 结构体的定义Ⅲ 结构体初始化Ⅳ 访问结构体成员⒈结构体变量访问结构体成员⒉结构体指针访问结构体成员 Ⅴ 结构体的嵌套Ⅵ 结构体传参 前言 C 语言提供了一些非常基本的数据类型,如 int、float、double、char 等,这些不同…

基于R语言的水文、水环境模型优化技术及快速率定方法与多模型案例实践

目录 专题一、最速上升法、岭分析以及响应曲面模型 专题二、Kriging插值与优化方法 专题三、启发式算法 专题四、采样方法 专题五、高斯过程回归 专题六、基于模型的高斯过程/贝叶斯优化设计 专题七、最优化的快速化 专题八、高级高斯过程模型 专题九、异方差性 专题…

动手学深度学习——图像分类数据集(代码详解)

目录 1. 图像分类数据集1.1 读取数据集1.2 读取小批量1.3 整合所有组件1.4 小结 1. 图像分类数据集 这里采用Fashion-MNIST数据集 torchvision:torch类型的可视化包,一般计算机视觉和数据可视化需要使用from torchvision import transforms:…

基于单片机的智能台灯 灯光控制系统人体感应楼梯灯系统的设计与实现

功能介绍 以STM32单片机作为主控系统;主通过光敏采集当前光线强度;通过PMW灯光调节电路,我们可以根据不同的光线亮度,进行3挡调节;通过人体红外检测当前是否有人;通过不同光线情况下使用PWM脉冲电路进行调节…

13matlab数据分析多项式的求值(matlab程序)

1.简述 统计分析常用函数 求最大值 max 和 sum 积 prod 平均值:mean 累加和:cumsum 标准差:std 方差:var 相关系数:corrcoef 排序:sort 四则运算 1.多项式的加减运算就是所对应的系数向量的加减运算&#…

使用jQuery的ajax提交图片信息

1 设置图片id(html) 首先,定义上传图片的id,根据上传文件的id获取图片信息: 注:图片的id应该设置在input标签里面 2 发送ajax请求(js) var formData new FormData(); formData.ap…

day40-Mybatis(resultMap拓展)

0目录 Mybatis-resultMap拓展 1.2.3 1.数据库字段和javabean实体类属性不一致时 解决方案1:将sql语句中给予别名(别名同javabean中实体类保持一致) 解决方案2:使用resultMap 2.两表关联(用户表和角色表关联查询&…

【算法基础:数据结构】2.2 字典树/前缀树 Trie

文章目录 知识点cpp结构体模板 模板例题835. Trie字符串统计❤️❤️❤️❤️❤️(重要!模板!)143. 最大异或对😭😭😭😭😭(Trie树的应用) 相关题目…

【UE4 塔防游戏系列】06-炮塔发射子弹攻击敌人

效果 步骤 1. 新建一个Actor蓝图类,命名为“TotalBulletsCategory”,用来表示子弹蓝图总类,后面会有很多不同类型的子弹会继承该类 打开“TotalBulletsCategory”,添加粒子系统组件、盒体碰撞组件和发射物移动组件 调整发射物重力…

电压放大器在超声波焊接中的作用以及应用

电压放大器是一种运用于电子设备中的信号放大器,主要作用是将小信号放大为更高幅度的信号。在超声波焊接中,电压放大器起到了重要的作用,它可以将从传感器采集到的微小信号放大为能够被检测和处理的合适大小的信号。 超声波焊接是现代工业生产…

使用shell监控应用运行状态通过企业微信接收监控通知

目的:编写shell脚本来监控应用服务运行状态,若是应用异常则自动重启应用通过企业微信接收监控告警通知 知识要点: 使用shell脚本监控应用服务使用shell脚本自动恢复异常服务通过企业微信通知接收监控结果shell脚本使用数组知识,…

二次元少女-InsCode Stable Diffusion 美图活动一期

一、 Stable Diffusion 模型在线使用地址: https://inscode.csdn.net/inscode/Stable-Diffusion 二、模型相关版本和参数配置: 模型版本:chilloutmix_NiPrunedFp32Fix.safetensors 采样方法(Sampler)Sampling method:DPM SDE …

xpath下载安装——Python爬虫xpath插件下载安装(2023.7亲测可用!!)

目录 1.免费下载插件链接(若失效评论区留言发送最新链接)(2023.7亲测可用) 2.安装插件 (1)打开chrome浏览器页面,点击:右上角三个点 > 扩展程序 > 管理拓展程序 &#xff…

2023-7-19-第二十式迭代器模式

🍿*★,*:.☆( ̄▽ ̄)/$:*.★* 🍿 💥💥💥欢迎来到🤞汤姆🤞的csdn博文💥💥💥 💟💟喜欢的朋友可以关注一下&#xf…

TortoiseGit 入门指南12:创建标签

前面的文章不止一次的提到过 标签 (Tag),我们在《TortoiseGit 入门指南08:浏览引用以及在引用间切换》一文中知道,标签 是一种 引用;还知道每个提交都对应着一个 SHA-1 值,而引用就是 SHA-1 的一…

SuperGlue学习记录之最优传输

在进行最优传输相关理论的学习过程中,找到SuperGlue这篇论文,该篇论文通过最优传输来完成特征点的匹配过程。 SuperGlue结构 先来看一下其结构: 首先将两张图片送入特征提取网络,通过卷积网络提取出特征,主要有四个值…

Generative Adversarial Network

Goodfellow,2014年 文献阅读笔记--GAN--Generative Adversarial NetworkGAN的原始论文-组会讲解_gan英文论文_Flying Warrior的博客-CSDN博客 启发:如何看两个数据是否来自同一个分布? 在统计中,two sample test。训练一个二分类的分类器,如果能分开这两个数据,说明来自…

网络安全—信息安全—黑客技术(学习笔记)

一、什么是网络安全? 网络安全可以基于攻击和防御视角来分类,我们经常听到的 “红队”、“渗透测试” 等就是研究攻击技术,而“蓝队”、“安全运营”、“安全运维”则研究防御技术。 无论网络、Web、移动、桌面、云等哪个领域,都…

[深度学习入门]什么是神经网络?[神经网络的架构、工作、激活函数]

目录 一、前言二、神经网络的架构——以手写数字识别三、神经网络的工作1、单输入单输出感知器函数2、二维输入参数3、三维输入参数 四、激活函数1、激活函数2、ReLU激活函数3、非线性激活函数(1)二输入二输出的神经网络的架构(2)…