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

本文介绍了如何在Flutter中创建一个调色板,通过GridView构建网格布局,每个单元格作为颜色板,颜色随机生成,点击可触发事件。详细步骤包括设置gridDelegate控制布局,使用List.generate创建子组件,并在onPressed中处理点击事件。
摘要由CSDN通过智能技术生成


我们在上一章回中介绍了打印日志相关的内容,本章回中将介绍 如何创建一个调色板.闲话休提,让我们一起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左右两侧的边距值依据项目需求决定,不过最好让它们保持相等;

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

talk_8

真诚赞赏,手有余香

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值