Flutter用GridView实现网格功能(1、item设置一个外边框,2、item背景点击变色,松开恢复原色)

GridView接收如下可选参数属性:

  • scrollDirection:滚动方法
  • padding:内边距
  • resolve:组件反向排序
  • crossAxisSpacing:水平子Widget之间间距
  • mainAxisSpacing:垂直子Widget之间间距
  • crossAxisCount:一行的Widget数量
  • childAspectRatio:子Widget宽高比例
  • children
  • gridDelegate:控制布局主要用在GridView.builder里面

实现代码,我不说多
1、网格数据,我选择的是七个数据:图标和对应它的小标题

import 'package:flutter/material.dart';

List listData = [
  {
    "title": "信息列表1",
    "author": 'Mohamed Chahin',
    // "imageUrl": 'https://www.itying.com/images/flutter/1.png',
    // "imageUrl": 'images/json.png',
    "imageUrl": Icons.account_tree_rounded,
  },
  {
    "title": '信息列表2',
    "author": 'Mohamed Chahin',
    // "imageUrl": 'https://www.itying.com/images/flutter/1.png',
    // "imageUrl": 'images/statistics.png',
    "imageUrl": Icons.ad_units_rounded,
  },
  {
    "title": '信息列表3',
    "author": 'Mohamed Chahin',
    // "imageUrl": 'https://www.itying.com/images/flutter/1.png',
    // "imageUrl": 'images/statistics.png',
    "imageUrl": Icons.adb,
  },
  {
    "title": '信息列表4',
    "author": 'Mohamed Chahin',
    // "imageUrl": 'https://www.itying.com/images/flutter/1.png',
    // "imageUrl": 'images/statistics.png',
    "imageUrl": Icons.add_alert_sharp,
  },
  {
    "title": '信息列表5',
    "author": 'Mohamed Chahin',
    // "imageUrl": 'https://www.itying.com/images/flutter/1.png',
    // "imageUrl": 'images/statistics.png',
    "imageUrl": Icons.add_a_photo_rounded,
  },
  {
    "title": '信息列表6',
    "author": 'Mohamed Chahin',
    // "imageUrl": 'https://www.itying.com/images/flutter/1.png',
    // "imageUrl": 'images/json.png',
    "imageUrl": Icons.add_a_photo_outlined,
  },
  {
    "title": '信息列表7',
    "author": 'Mohamed Chahin',
    // "imageUrl": 'images/statistics.png',
    "imageUrl": Icons.add_photo_alternate_sharp,
  }
];

2、视图main.dart代码:

import 'package:flutter/material.dart';
import 'package:flutter_test_app/res/listData.dart';

void main() {
  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
        useMaterial3: true,
      ),
      home: const MyHomePage(title: 'Flutter Demo Home Page'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  const MyHomePage({super.key, required this.title});

  final String title;

  
  State<MyHomePage> createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        backgroundColor: Theme.of(context).colorScheme.inversePrimary,
        title: Text(widget.title),
      ),
      body: Column(
        mainAxisAlignment: MainAxisAlignment.center,
        children: <Widget>[
          //新增代码
          Expanded(
            child: GridViewTest(),
          ),
        ],
      ),
    );
  }
}

class GridViewTest extends StatefulWidget {
  
  LayoutDemo createState() => LayoutDemo();
}

class LayoutDemo extends State<GridViewTest> {
  List<Widget> _getListData() {
    var tempList = listData.map((value) {
      return Center(
        child: InkWell( //InkWell:GridView的item背景点击变色,松开恢复原色
          onTap: () {},
          child: Container(
            alignment: Alignment.bottomCenter,
            //设置一个外边框
            decoration: BoxDecoration(
                border: Border.all(
              color: Colors.black12,
              width: 1.0, //默认
            )),

            child: Column(
              mainAxisAlignment: MainAxisAlignment.center,
              children: <Widget>[
                const SizedBox(width: 10, height: 10),
                Icon(
                  value['imageUrl'],
                  color: Colors.green,
                  size: 60,
                ),
                Text(value['title'])
              ],
            ),
          ),
        ),
      );
    });
    return tempList.toList();
  }

  
  Widget build(BuildContext context) {
    return GridView.count(
      crossAxisCount: 3,
      children: _getListData(),
      // mainAxisSpacing:9.0,
      // crossAxisSpacing:9.0,
      // padding: const EdgeInsets.all(10),
    );
  }
}

运行效果:

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

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

相关文章

C#/.NET/.NET Core优秀项目和框架2023年12月简报

前言 公众号每月定期推广和分享的C#/.NET/.NET Core优秀项目和框架&#xff08;公众号每周至少推荐两个优秀的项目和框架当然节假日除外&#xff09;&#xff0c;公众号推文有项目和框架的介绍、功能特点以及部分功能截图等&#xff08;打不开或者打开GitHub很慢的同学可以优先…

Wireshark本地回环网络抓包

背景 因为发往本机的数据包是通过回环地址的&#xff0c;即&#xff1a;数据包不会通过真实的网络接口发送&#xff0c;因此我们需要通过设置路由规则来让本来发到虚拟网络接口的数据包发送到真实网络接口即可。 场景描述&#xff1a;在网络程序开发的过程中&#xff0c;有时…

SQL中 Group by Grouping Sets 分组的用法

文章目录 1. 用法2. 语法3. 实际应用3.1 求总和与小计3.2 按多个维度分组3.3 标记小计和总计 1. 用法 将Grouping Sets 运算符添加到Group by 子句中&#xff0c;使用Grouping Set 可以在一个查询中指定数据的多个分组&#xff0c;其结果与针对指定的组执行union all 运算等效…

k8s中的容器探针

pod的容器健康检查---探针 probe&#xff1a;k8s对容器执行的定期检查&#xff0c;诊断。 探针的三种规则 所有的探针都是针对容器不是针对pod 1、 存活探针---livenessProbe&#xff1a;探测容器是否正常运行。如果发现探测失败&#xff0c;会杀掉容器。容器会根据重启策略…

ensp vlan连接(详细)

1.将需要的设备放置好 2.将设备连接起来 3.启动所有设备 4.备注好每台PC机的信息 5.配置好每台PC机 6.配置交换机1 进入配置视图&#xff0c;关闭信息提示 重命名设备 批量创建VLAN 开始配置接口 更改接口类型为ACCESS 将接口划分到对应的VLANN 配置下一个接口&#xff0c;步…

windows server 2012 安装telnet

系统版本 安装telnet 勾选telnet客户端 点击安装 等待安装完成 打开cmd&#xff0c;输入telnet&#xff0c;出现下图&#xff0c;说明安装成功 telnet.exe路径

hAdmin漂亮的后台html模板免费下载

hAdmin漂亮的后台html模板免费下载-遇见你与你分享

STGAN:用于交通数据插补的时空生成对抗网络

文章地址: STGAN: Spatio-temporal generative adversarial network for traffic data imputation 主要研究问题: 由于硬件故障或数据传输,观测到的交通数据中产生了噪声和缺失条目。这些质量差的数据无疑会降低ITS的性能; 本文贡献: 为交通数据插补任务提出了一种改进…

华芯微特MCU之TIMER触发ADC

01 TIMER定时器之脉冲发送功能 我们今天详细讲解一下TIMER的ADC触发功能。 SWM190的TIMER2/3支持SAR ADC触发功能&#xff0c;此功能配置为定时器或脉冲发送均有效&#xff0c;可通过配置相应寄存器实现。 将SAR ADC CTRL寄存器中TRIG设置为TIMER2触发或TIMER3触发。TIMER可作…

手机视频监控客户端APP,实时视频分享,享受免密看直播

目 录 一、媒体分享功能随处可见 二、手机视频监控客户端App分享功能 &#xff08;一&#xff09;手机APP安装 &#xff08;二&#xff09;手机APP功能描述 &#xff08;三&#xff09;实时视频分享介绍 三、实时监控视频分享的应用场景 1、搜救现场 2、指…

教育场景数字化中音视频小程序的发展

教育场景数字化逐步成为刚需 2018年以来&#xff0c;国家对在线教育行业的监管收紧&#xff0c;以及受益于 5G 技术的发展&#xff0c;教育科技逐步走向成熟化和规范化。 教育行业的本质是人与人&#xff08;老师与学生、老师与家长&#xff0c;以及更多角色直接的沟通与互动…

java基于SSM的校内信息服务发布系统的设计与实现+vue论文

校内信息服务发布系统的设计与实现 摘要 近年来&#xff0c;信息化管理行业的不断兴起&#xff0c;使得人们的日常生活越来越离不开计算机和互联网技术。首先&#xff0c;根据收集到的用户需求分析&#xff0c;对设计系统有一个初步的认识与了解&#xff0c;确定校内信息服务发…

GPT-Pilot:AI开发者的伴侣

GPT Pilot 一个真正的AI程序员&#xff0c;它可以从零开始构建整个应用程序&#xff0c;它能自己编写代码、配置开发环境、管理开发任务、调试代码&#xff0c;你还可以随时和它聊天提问帮助你解决开发难题。你只需要在一旁监督开发过程即可... 主要功能 自动化编码&#xff…

【栈越界】变量未赋值前提下,值却发生改变??

首先&#xff0c;提出2个问题&#xff1a; 数组越界 和 栈越界是一回事吗&#xff1f;以上两种越界若有发生&#xff0c;程序一定会跑飞吗&#xff1f; 目录 1. 一个栈越界的例子2. 程序的内存分部3. RAM 空间示意图 1. 一个栈越界的例子 创建 STM32 工程并写了一段测试代码 …

【损失函数】Hinge Loss 合页损失

1、介绍 Hinge Loss&#xff08;合页损失&#xff09;通常用于支持向量机&#xff08;Support Vector Machine&#xff0c;SVM&#xff09;等模型中&#xff0c;特别是在二分类问题中。它的目标是使正确类别的分数与错误类别的最高分之间的差异达到一个固定的边界&#xff0c;从…

力扣hot100 二叉树的直径

&#x1f468;‍&#x1f3eb; 题目地址 一个节点的最大直径 它左树的深度 它右树的深度 &#x1f60b; AC code /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* Tr…

jmeter安装使用

下载 解压后 apache-jmeter-5.5\bin\jmeter.bat 启动 简单使用: 创建线程组 创建默认请求头 创建请求 post请求需要设置请求头信息 创建结果树启动

电网2.0-安科瑞EMS智能化用配电未来应用

安科瑞 崔丽洁 摘要&#xff1a;随着科技的发展&#xff0c;电力系统正逐步向智能化、数字化、互联网化迈进。智能配电与智能用电是电力产业发展的重要方向&#xff0c;将为传统电力系统带来革命性的变革。本文将对智能配电和智能用电的概念、特点、关键技术及应用进行详细介绍…

深入理解左倾红黑树 | 京东物流技术团队

平衡二叉搜索树 平衡二叉搜索树&#xff08;Balanced Binary Search Tree&#xff09;的每个节点的左右子树高度差不超过 1&#xff0c;它可以在 O(logn) 时间复杂度内完成插入、查找和删除操作&#xff0c;最早被提出的自平衡二叉搜索树是 AVL 树。 AVL 树在执行插入或删除操…

JavaWeb基础(2)- Web概述、HTTP协议、Servlet、Request与Response

JavaWeb基础&#xff08;2&#xff09;- Web概述、HTTP协议、Servlet、Request与Response 文章目录 JavaWeb基础&#xff08;2&#xff09;- Web概述、HTTP协议、Servlet、Request与Response3 Web概述3.1 Web和JavaWeb的概念3.2 JavaWeb技术栈3.2.1 B/S架构**3.2.2 静态资源**3…