当前位置: 首页 > news >正文

Flutter利用GridView创建网格布局实现优美布局

请添加图片描述

文章目录

  • 简介
  • 使用详解
    • 导入依赖项
    • 创建一个基本的 GridView
    • 一些参数说明
    • 使用GridView.count来构造
  • 其他控制
  • 总结

简介

GridView 是 Flutter 中用于创建网格布局的强大小部件。它允许你在行和列中排列子小部件,非常适合显示大量项目,例如图像、文本、卡片等。

使用详解

以下是关于如何使用 GridView 控件的详细讲解:

导入依赖项

在你的 Flutter 项目中,首先确保已经导入了 flutter/material.dart 包,因为 GridView 是 material 包的一部分,然后你可以使用以下代码创建一个简单的 GridView:

import 'package:flutter/material.dart';

创建一个基本的 GridView

下面是一个基本的 GridView 示例,它创建了一个包含一组简单文本小部件的网格:

GridView(gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(crossAxisCount: 2, // 列数mainAxisSpacing: 10.0, // 垂直间距crossAxisSpacing: 10.0, // 水平间距),children: <Widget>[Container(color: Colors.red,child: Center(child: Text('Item 1')),),Container(color: Colors.green,child: Center(child: Text('Item 2')),),Container(color: Colors.blue,child: Center(child: Text('Item 3')),),// 可以继续添加更多的子小部件],
)

在这个示例中,我们创建了一个包含三个列的网格(crossAxisCount: 2)。每个网格项都由一个带有不同背景颜色的 Container 包装,并且包含一个居中对齐的文本小部件。

一些参数说明

SliverGridDelegateWithFixedCrossAxisCount
gridDelegate 属性是 GridView 的一个关键部分,它用于定义网格的布局方式。在上面的示例中,我们使用了 SliverGridDelegateWithFixedCrossAxisCount,它采用以下参数:

crossAxisCount:指定了列数。
mainAxisSpacing:指定了主轴(通常是垂直轴)上的间距。
crossAxisSpacing:指定了交叉轴(通常是水平轴)上的间距。
使用 builder 构建动态网格
如果你有一个大数据源,并且不想一次性加载所有数据,你可以使用 GridView.builder,它会根据需要生成网格项。以下是一个示例:

GridView.builder(gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(crossAxisCount: 2,mainAxisSpacing: 10.0,crossAxisSpacing: 10.0,),itemCount: yourData.length, // 数据源的长度itemBuilder: (BuildContext context, int index) {return Container(color: Colors.blue,child: Center(child: Text('Item $index')),);},
)

在这个示例中,itemBuilder 函数会根据索引值生成每个网格项。你可以根据实际需求从 yourData 数据源中获取数据。

使用GridView.count来构造

GridView.count(crossAxisCount: 4,children: List.generate(snapshot.data?.length as int, (index) {return Center(child: Padding(padding: const EdgeInsets.all(6.0),child: Column(mainAxisAlignment: MainAxisAlignment.center,children: [GestureDetector(onTap: () {print('Button $index is pressed,${snapshot.data?[index].sptime},${snapshot.data?[index].cycle},${snapshot.data?[index].retime}');// 按钮点击事件AppRouter.router.navigateTo(context,'/DoSportsPage/${snapshot.data?[index].sptime}/${snapshot.data?[index].cycle}/${snapshot.data?[index].retime}',transition: TransitionType.fadeIn,);// Navigator.of(context).pop();// Navigator.of(context).push(MaterialPageRoute(builder: (context) => const SportsShow()));},//long time press button to delete dataonLongPress: ( ) {print('Button $index is longpressed id= ${snapshot.data?[index].id}');DatabaseHelper.dbhelper.delete(snapshot.data?[index].id);setState(() {//show again});},child: CircleAvatar(child: Text(snapshot.data?[index].title.substring(0, 1)),// radius: 30,// backgroundImage: AssetImage('assets/touxiang.jpg'),// backgroundColor: Colors.white,),),const SizedBox(height: 8),Text(snapshot.data![index].title,style: const TextStyle(fontSize: 12),),],),),);}),);} else {return const CircularProgressIndicator();}

这段代码是使用 GridView.count 构建一个网格布局,其中 crossAxisCount 属性定义了网格的列数,而 children 属性用于指定网格中的子小部件列表。

GridView.count: 这是一个 GridView 的构造函数,用于创建一个具有固定列数的网格布局。

crossAxisCount: 这是 GridView.count 构造函数的一个参数,它指定了网格的列数。在你的示例中,crossAxisCount 设置为 4,表示该网格将包含四列。

children: 这是一个包含要在网格中显示的子小部件的列表。在你的示例中,它使用 List.generate 函数生成了一个包含 snapshot.data?.length 个元素的列表。snapshot.data?.length 是一个可能为空的数据长度,因此在此处使用 ?. 运算符以避免出现空指针异常。

List.generate 函数接受两个参数:

第一个参数是要生成的列表的长度,这里是 snapshot.data?.length。

第二个参数是一个回调函数,用于生成列表中每个元素的内容。在你的示例中,回调函数 (index) 生成了网格中每个元素的内容。

所以,这段代码的作用是创建一个包含固定列数(4列)的网格,其中每个格子的内容由 List.generate 函数生成,数量等于 snapshot.data?.length。通常,snapshot.data 包含从数据源检索到的数据,而这段代码将这些数据以网格的形式进行展示。

其他控制

在 Flutter 中,GridView 提供了各种属性和参数,以便你可以配置滚动方向、内容填充以及滚动控制。以下是一些常用的属性和参数:

滚动方向(scrollDirection):
使用 scrollDirection 属性可以设置 GridView 的滚动方向。默认情况下,它是垂直方向的,但你可以将其设置为水平方向。

GridView(scrollDirection: Axis.horizontal, // 设置为水平滚动// 其他属性...
)

内容填充(padding):
使用 padding 属性可以设置 GridView 内容的内边距。你可以在内边距中定义空白区域,以便在网格周围留出一些空间。

GridView(padding: EdgeInsets.all(16.0), // 设置内边距为16.0// 其他属性...
)

滚动控制(controller):
你可以使用 controller 属性来自定义滚动控制器,以实现更高级的滚动控制功能。例如,你可以创建一个 ScrollController 并将其传递给 GridView,以便监听滚动位置、滚动到特定位置等。

ScrollController _controller = ScrollController();GridView(controller: _controller,// 其他属性...
)

这样,你可以使用 _controller 对象来执行滚动操作,例如:

滚动到特定位置:_controller.jumpTo(offset) 或 _controller.animateTo(offset, duration: Duration(milliseconds: 500), curve: Curves.ease)

监听滚动位置:可以添加监听器 _controller.addListener(() { /* 处理滚动位置的变化 */ })

这些属性和参数使你能够根据需求对 GridView 进行自定义和控制,以创建不同类型的滚动网格布局。

总结

GridView 持许多其他配置选项,如滚动方向、内容填充、滚动控制等。你可以根据你的应用需求进行进一步的定制。总的来说,GridView 是一个非常灵活且强大的小部件,可用于创建各种网格布局。


结束语
Flutter是一个由Google开发的开源UI工具包,它可以让您在不同平台上创建高质量、美观的应用程序,而无需编写大量平台特定的代码。我将学习和深入研究Flutter的方方面面。从基础知识到高级技巧,从UI设计到性能优化,欢饮关注一起讨论学习,共同进入Flutter的精彩世界!

相关文章:

Flutter利用GridView创建网格布局实现优美布局

文章目录 简介使用详解导入依赖项创建一个基本的 GridView一些参数说明使用GridView.count来构造 其他控制总结 简介 GridView 是 Flutter 中用于创建网格布局的强大小部件。它允许你在行和列中排列子小部件&#xff0c;非常适合显示大量项目&#xff0c;例如图像、文本、卡片…...

IDEA 基本配置

IDEA 基本配置 1、基本样式2、环境参数3、基本插件4、参考 1、基本样式 设置全局字体大小 配置font 字体大小&#xff1a;15 配置类注释 /** ** Author: ${USER}* Date: ${YEAR}-${MONTH}-${DAY} ${HOUR}:${MINUTE}* Version: 1.0.0 */配置注释keymap 添加 注释 ccm&…...

计算机组成原理平时作业一

计算机组成原理平时作业一 1.单选题 1.1计算机中使用总线结构便于增减外设&#xff0c;同时&#xff08;c &#xff09;。 a.减少了信息传输量 b.提高了信息传输量 c.减少了信息传输量的条数 d.三者均正确 答案解析&#xff1a; 概念规定 1.2在定点补码运算器中&#xff0c;…...

iOS Crash 治理:淘宝VisionKitCore 问题修复

本文通过逆向系统&#xff0c;阅读汇编指令&#xff0c;逐步找到源码&#xff0c;定位到了 iOS 16.0.<iOS 16.2 WKWebView 的系统bug 。同时苹果已经在新版本修复了 Bug&#xff0c;对于巨大的存量用户&#xff0c;仍旧会造成日均 Crash pv 1200 uv 1000&#xff0c; 最终通…...

NSSM部署window服务

nssm 下载 安装服务&#xff1a;nssm install <servicename> 启动服务&#xff1a;nssm start <servicename> 停止服务&#xff1a;nssm stop <servicename> 重启服务: nssm restart <servicename> 删除创建的servername服务: nssm remove <service…...

Go语言数据类型

文章目录 Go语言数据类型一、布尔类型二、数字类型三、字符串类型四、派生类型 Go语言数据类型 在 Go 编程语言中&#xff0c;数据类型用于声明函数和变量。 数据类型的出现是为了把数据分成所需内存大小不同的数据&#xff0c;编程的时候需要用大数据的时候才需要申请大内存…...

Python爬取汽车之家二手车数据并作可视化

大家早好、午好、晚好吖 ❤ ~欢迎光临本文章 如果有什么疑惑/资料需要的可以点击文章末尾名片领取源码 课程亮点: 1、系统分析目标网页 2、html标签数据解析方法 3、海量数据一键保存 获取二手车数据 环境介绍: python 3.8 pycharm 2022.3专业版 requests >>>…...

NeRF神经辐射场渲染过程详解,三维重建渲染过程基本原理_光线采样sample_pdf()和光线渲染render_rays ()代码详解

目录 1 神经辐射场 1.1 基本原理 1.2 基本流程 1.3 数学解释 2 三维场景图像渲染详解 2.1射线采样 2.2 NeRF 模型预测 2.3 体积渲染 3 采样与渲染代码详解 &#xff08;rending.py&#xff09; 3.1 神经体积渲染代码解析 3.2 sample_pdf 函数 3.3 render_rays 函数 …...

Msa类处理多序列比对数据

同源搜索&#xff0c;多序列比对等都是常用的方式&#xff0c;但是有很多的软件可以实现这些同源搜索和多序列比对&#xff0c;但是不同的软件输出的文件格式却是不完全一致&#xff0c;有熟悉的FASTA格式的&#xff0c;也有A2M, A3M,stockholm等格式。 详细介绍&#xff1a; …...

ChatGPT如何管理对话历史?

问题 由于现在开始大量使用ChatGPT对话功能&#xff0c;认识到他在提供启发方面具有一定价值。比如昨天我问他关于一个微习惯的想法&#xff0c;回答的内容还是很实在&#xff0c;而且能够通过他的表达理解自己的问题涉及到的领域是什么。 此外&#xff0c;ChatGPT能够总结对话…...

独立键盘接口设计(Keil+Proteus)

前言 软件的操作参考这篇博客。 LED数码管的静态显示与动态显示&#xff08;KeilProteus&#xff09;-CSDN博客https://blog.csdn.net/weixin_64066303/article/details/134101256?spm1001.2014.3001.5501实验&#xff1a;用4个独立按键控制8个LED指示灯。 按下k1键&#x…...

阿里云99元服务器2核2G3M带宽_4年396元_新老用户同享

阿里云99元服务器新老用户同享活动 aliyunfuwuqi.com/go/aliyun 首先要在2023年11月1日去阿里云活动页下单新购这个套餐&#xff0c;享受99元包1年。同天再续费1年又享受了99元包1年&#xff1b;等到明年2024年11月1日之后&#xff0c;又可以以99元续1年&#xff1b;最后等到20…...

数据库实验:SQL的数据控制

目录 数据控制实验目的实验内容实验要求实验过程实验内容提纲实验过程 数据控制 数据控制SQL语句(DCL)是一类可对用户数据访问权进行控制的操作语句&#xff0c;可以控制特定用户或角色对数据表、视图、存储过程、触发器等数据对象的访问权限。主要有GRANT、REVOKE、DENY语句操…...

深度学习_10_softmax_实战

由于网上代码的画图功能是基于jupyter记事本&#xff0c;而我用的是pycham,这导致画图代码不兼容pycharm,所以删去部分代码&#xff0c;以便能更好的在pycharm上运行 完整代码&#xff1a; import torch from d2l import torch as d2l"创建训练集&创建检测集合"…...

基于SpringBoot+Vue的博物馆管理系统

基于springbootvue的博物馆信息管理系统的设计与实现~ 开发语言&#xff1a;Java数据库&#xff1a;MySQL技术&#xff1a;SpringBootMyBatisVue工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系统展示 主页 登录界面 管理员界面 用户界面 摘要 基于SpringBoot和Vue的博物馆…...

软件开发中常见的设计原则

软件开发中常见的设计原则 1. 单一责任原则2. 开放封闭原则3. 里氏替换原则4. 接口分离原则5. 依赖倒置原则6. 迪米特法则7. 合成复用原则8. 共同封闭原则9. 稳定抽象原则10. 稳定依赖原则 简写全拼中文翻译SRPThe Single Responsibility Principle单一责任原则OCPThe Open Clo…...

Linux安装ffmpeg并截取图片和视频的缩略图使用

Linux安装ffmpeg并截取图片和视频的缩略图使用 官方下载地址: http://www.ffmpeg.org/download.html#releases 我这里使用版本: ffmpeg_3.2_repo.tar.gz 可以百度网盘分享给大家 安装的环境为 Centos 64位操作系统 安装时须为 root 用户进行操作 #解压 tar -zxvf ffmpeg_3…...

第三章:人工智能深度学习教程-基础神经网络(第一节-ANN 和 BNN 的区别)

你有没有想过建造大脑之类的东西是什么感觉&#xff0c;这些东西是如何工作的&#xff0c;或者它们的作用是什么&#xff1f;让我们看看节点如何与神经元通信&#xff0c;以及人工神经网络和生物神经网络之间有什么区别。 1.人工神经网络&#xff1a;人工神经网络&#xff08;…...

高防CDN与高防服务器:为什么高防服务器不能完全代替高防CDN

在当今的数字化时代&#xff0c;网络安全已经成为企业不容忽视的关键问题。面对不断增长的网络威胁和攻击&#xff0c;许多企业采取了高防措施以保护其网络和在线资产。然而&#xff0c;高防服务器和高防CDN是两种不同的安全解决方案&#xff0c;各自有其优势和局限性。在本文中…...

关于卷积神经网络的多通道

多通道输入 当输入的数据包含多个通道时&#xff0c;我们需要构造一个与输入通道数相同通道数的卷积核&#xff0c;从而能够和输入数据做卷积运算。 假设输入的形状为n∗n&#xff0c;通道数为ci​&#xff0c;卷积核的形状为f∗f&#xff0c;此时&#xff0c;每一个输入通道都…...

docker详细操作--未完待续

docker介绍 docker官网: Docker&#xff1a;加速容器应用程序开发 harbor官网&#xff1a;Harbor - Harbor 中文 使用docker加速器: Docker镜像极速下载服务 - 毫秒镜像 是什么 Docker 是一种开源的容器化平台&#xff0c;用于将应用程序及其依赖项&#xff08;如库、运行时环…...

无法与IP建立连接,未能下载VSCode服务器

如题&#xff0c;在远程连接服务器的时候突然遇到了这个提示。 查阅了一圈&#xff0c;发现是VSCode版本自动更新惹的祸&#xff01;&#xff01;&#xff01; 在VSCode的帮助->关于这里发现前几天VSCode自动更新了&#xff0c;我的版本号变成了1.100.3 才导致了远程连接出…...

条件运算符

C中的三目运算符&#xff08;也称条件运算符&#xff0c;英文&#xff1a;ternary operator&#xff09;是一种简洁的条件选择语句&#xff0c;语法如下&#xff1a; 条件表达式 ? 表达式1 : 表达式2• 如果“条件表达式”为true&#xff0c;则整个表达式的结果为“表达式1”…...

基于当前项目通过npm包形式暴露公共组件

1.package.sjon文件配置 其中xh-flowable就是暴露出去的npm包名 2.创建tpyes文件夹&#xff0c;并新增内容 3.创建package文件夹...

Robots.txt 文件

什么是robots.txt&#xff1f; robots.txt 是一个位于网站根目录下的文本文件&#xff08;如&#xff1a;https://example.com/robots.txt&#xff09;&#xff0c;它用于指导网络爬虫&#xff08;如搜索引擎的蜘蛛程序&#xff09;如何抓取该网站的内容。这个文件遵循 Robots…...

【Zephyr 系列 10】实战项目:打造一个蓝牙传感器终端 + 网关系统(完整架构与全栈实现)

🧠关键词:Zephyr、BLE、终端、网关、广播、连接、传感器、数据采集、低功耗、系统集成 📌目标读者:希望基于 Zephyr 构建 BLE 系统架构、实现终端与网关协作、具备产品交付能力的开发者 📊篇幅字数:约 5200 字 ✨ 项目总览 在物联网实际项目中,**“终端 + 网关”**是…...

今日科技热点速览

&#x1f525; 今日科技热点速览 &#x1f3ae; 任天堂Switch 2 正式发售 任天堂新一代游戏主机 Switch 2 今日正式上线发售&#xff0c;主打更强图形性能与沉浸式体验&#xff0c;支持多模态交互&#xff0c;受到全球玩家热捧 。 &#x1f916; 人工智能持续突破 DeepSeek-R1&…...

大语言模型(LLM)中的KV缓存压缩与动态稀疏注意力机制设计

随着大语言模型&#xff08;LLM&#xff09;参数规模的增长&#xff0c;推理阶段的内存占用和计算复杂度成为核心挑战。传统注意力机制的计算复杂度随序列长度呈二次方增长&#xff0c;而KV缓存的内存消耗可能高达数十GB&#xff08;例如Llama2-7B处理100K token时需50GB内存&a…...

让回归模型不再被异常值“带跑偏“,MSE和Cauchy损失函数在噪声数据环境下的实战对比

在机器学习的回归分析中&#xff0c;损失函数的选择对模型性能具有决定性影响。均方误差&#xff08;MSE&#xff09;作为经典的损失函数&#xff0c;在处理干净数据时表现优异&#xff0c;但在面对包含异常值的噪声数据时&#xff0c;其对大误差的二次惩罚机制往往导致模型参数…...

iOS性能调优实战:借助克魔(KeyMob)与常用工具深度洞察App瓶颈

在日常iOS开发过程中&#xff0c;性能问题往往是最令人头疼的一类Bug。尤其是在App上线前的压测阶段或是处理用户反馈的高发期&#xff0c;开发者往往需要面对卡顿、崩溃、能耗异常、日志混乱等一系列问题。这些问题表面上看似偶发&#xff0c;但背后往往隐藏着系统资源调度不当…...