Flutter组件GridView使用介绍

news2024/12/23 19:14:06

介绍


GridView 是 Flutter 中用于创建网格布局的滚动小部件。它可以创建多列布局,并且每个网格单元可以包含一个小部件。

GridView 提供了几种构造函数来创建不同类型的网格布局:

  1. GridView:最通用的构造函数,完全自定义网格布局。
  2. GridView.builder:按需构建网格项,适用于具有大量(或无限)网格项的动态内容。
  3. GridView.count:指定网格中的列数,适用于具有固定数量列的网格。
  4. GridView.extent:指定网格中最大交叉轴范围(例如,最大列宽),适用于需要控制列宽的网格。
  5. GridView.custom:这个构造函数提供了最高级别的自定义能力,允许使用自定义的SliverGridDelegate和SliverChildDelegate。

GridView 的属性


主要属性:

  • gridDelegate:控制网格布局的结构和布局。通常使用 SliverGridDelegateWithFixedCrossAxisCount(固定列数)或 SliverGridDelegateWithMaxCrossAxisExtent(固定最大列宽)。
  • children:网格中显示的小部件列表。只在使用默认构造函数 GridView 时使用。
  • scrollDirection:滚动方向,可以是Axis.horizontal(水平滚动)或Axis.vertical(垂直滚动)。
  • padding:网格周围的内边距。
  • crossAxisSpacingmainAxisSpacing:网格项之间的间距。
  • childAspectRatio:网格项的宽高比。
  • shrinkWrap: 使GridView的高度适应其内容,为true时占用其内容所需的最小空间,为false时占用尽可能多的空间。

注意:如果你有一个ListView或SingleChildScrollView并且想在其中包含一个GridView,一般设置shrinkWrap: true确保GridView的高度仅基于其内容大小,而不是尝试滚动,或者包含在固定高度的容器中再或者放在Expanded中使其可以扩展,不然会报错不显示GridView!

  • physics: 定义滚动行为的物理引擎,可选值为AlwaysScrollableScrollPhysics()始终允许滚动,BouncingScrollPhysics()边缘出现弹跳效果,ClampingScrollPhysics()滚动到边缘时会自动停止,NeverScrollableScrollPhysics()静态内容不需要滚动,一般常用的是这个并且可以去除GridView的边缘滑动效果

看下图可以更好的理解:

在这里插入图片描述
图片来源:https://juejin.cn/post/6844903889502732295

使用

1.GridView
默认构造方法,当子项数量较少且固定时,使用children属性是合适的。但当子项数量较大或动态生成时,考虑使用GridView.builder构造函数来提高性能

GridView(
  gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
    crossAxisCount: 2, // 定义网格列数
    mainAxisSpacing: 10.0, // 主轴(垂直方向或水平方向)间距
    crossAxisSpacing: 10.0, // 交叉轴(水平或垂直方向)间距
    childAspectRatio: 1.0, // 子项的宽高比
  ),
  children: <Widget>[
    ItemWidget(),
    ItemWidget(),
    // ...
  ],
)

2.GridView.builder:
适用于大量数据的情况,它会根据需要逐个构建子项,而不是一次性构建整个网格。有助于提高性能。

GridView.builder(
  gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
    crossAxisCount: 2,
  ),
  itemBuilder: (BuildContext context, int index) {
    return ItemWidget(index); // 通过索引构建子项
  },
  itemCount: Data.length, // 数据项的数量
)

3.GridView.count:
适用于知道子项数量且数量不会变化的情况。

GridView.count(
  crossAxisCount: 2,
  children: List.generate(
    10,
    (index) => ItemWidget(index),
  ),
)

4.GridView.extent:
适用于每个子项具有相同的最大主轴扩展的情况。

GridView.extent(
  maxCrossAxisExtent: 200,
  children: List.generate(
    10,
    (index) => ItemWidget(index),
  ),
)

5.GridView.custom:
提供了最大的灵活性(新手慎用),适用于构建定制的网格布局,它使用SliverChildBuilderDelegate来构建子项。

GridView.custom(
  gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
    crossAxisCount: 3,
  ),
  childrenDelegate: SliverChildBuilderDelegate(
    (BuildContext context, int index) {
      return ItemWidget(index);
    },
    childCount: Data.length,
  ),
)

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

vs报错TypeError: Cannot read property ‘parseComponent‘ of undefined(已解决)

目录 错误分析&#xff1a; 解决方案&#xff1a; 1.卸载 vue-template-compiler&#xff1a; 2.查看项目中已经安装的 Vue 的版本。 3.安装特定版本的 vue-template-compiler&#xff1a; 4.现在重新运行一下&#xff0c;成功&#xff01; 错误分析&#xff1a; 这是因…

练习接口测试第一步骤

最近一段时间学了Python语言&#xff0c;重新学了 Java&#xff0c;js&#xff0c;html语言&#xff0c;CSS&#xff0c;linux&#xff0c;一堆测试工具&#xff1b;唉&#xff5e; 在接触接口测试过程中补了很多课&#xff0c; 终于有点领悟接口测试的根本&#xff1b; 偶是…

在ubuntu上检查内存使用情况的九种方法

在 Ubuntu 中&#xff0c;可以通过 GUI(图形用户界面)和命令行使用多种方法来监视系统的内存使用情况&#xff0c;监视 Ubuntu 服务器上的内存使用情况并不复杂&#xff1b;了解已使用和可用的内存量对于故障排除和优化服务器性能至关重要&#xff0c;因为内存对系统 I/O 速度至…

008-关于FPGA/ZYNQ直接处理图像传感器数据输出的若干笔记(裸板采集思路)

文章目录 前言一、图像传感器厂商二、图像传感器的参数解析三、图像传感器中的全局曝光和卷帘曝光四、处理传感器图像数据流程1.研究当前图像传感器输出格式2.FPGA处理图像数据 总结 前言 最近也是未来需要考虑做的一件事情是&#xff0c;如何通过FPGA/ZYNQ去做显微镜图像观测…

VUE2/3:element ui table表格的显隐列(若依框架)

若依框架自带一个组件&#xff0c;封装了关于表格&#xff0c;展示和隐藏表格列的功能&#xff1b; 使用效果就是这样的&#xff0c;在表格上面&#xff0c;三个框&#xff0c;从左到右分别是隐藏上面搜索&#xff0c;刷新列表&#xff0c;和显隐列的功能&#xff1b; 一、下面…

基于 Spring Boot 支付宝沙箱支付(Java 版本)

基于 Spring Boot 支付宝沙箱支付&#xff08;Java 版本&#xff09; 步骤第一步&#xff1a;使用支付宝账户登录&#xff0c;打开控制台&#xff0c;进入沙箱环境第二步&#xff1a;配置内网穿透账号第三步&#xff1a;引入支付宝 SDK第四步&#xff1a; 配置 SpringBoot第五步…

【elastic search】JAVA操作elastic search

目录 1.环境准备 2.ES JAVA API 3.Spring Boot操作ES 1.环境准备 本文是作者ES系列的第三篇文章&#xff0c;关于ES的核心概念移步&#xff1a; https://bugman.blog.csdn.net/article/details/135342256?spm1001.2014.3001.5502 关于ES的下载安装教程以及基本使用&…

探秘人工智能大会:揭示未来技术发展趋势与学习之道

随着科技的飞速发展&#xff0c;人工智能&#xff08;AI&#xff09;已经逐渐渗透到我们生活的方方面面。 参加人工智能大会&#xff0c;不仅能够洞察到最前沿的技术动态&#xff0c;还能与业界专家、学者交流思想&#xff0c;共同探讨AI的未来发展。本文将带您探秘人工智能大…

SAP一次查看多张凭证明细SQ03

1、在SAP中通过FB03可以查看所有的凭证清单&#xff0c;但是如果想一次性查看多张凭证的行项目明细&#xff0c;通过SAP的查询功能SQ03来查询 首先&#xff0c;通过SQ03&#xff0c;给用户组&#xff0c;输入“/SAPQUERY/GL”&#xff0c;回车 2、通过SQ02&#xff0c;菜单栏的…

重建传播网络并识别隐藏来源

1.摘要 我们从数据中揭示复杂网络结构和动态的能力&#xff0c;对于理解和控制复杂系统中的集体动态至关重要。尽管在这一领域已有近期进展&#xff0c;但如何从有限的时间序列中重建具有随机动态过程的网络仍然是一个突出问题。在这里&#xff0c;我们开发了一个基于压缩感知的…

大语言模型面试问题

自己在看面经中遇到的一些面试题&#xff0c;结合自己和理解进行了一下整理。 transformer中求和与归一化中“求和”是什么意思&#xff1f; 求和的意思就是残差层求和&#xff0c;原本的等式为y H(x)转化为y x H(x)&#xff0c;这样做的目的是防止网络层数的加深而造成的梯…

k8s动态PV

当发布PVC之后可以生成PV&#xff0c;还可以再共享服务器上直接绑定和使用PV 动态PV需要两个组件&#xff1a; 存储卷插件&#xff0c;k8s本身支持的动态PV创建不包括NFS&#xff0c;需要声明和安装一个外插件 Provisioner&#xff1a;存储分配器。动态创建PV&#xff0c;然后…

互联网加竞赛 基于大数据的社交平台数据爬虫舆情分析可视化系统

文章目录 0 前言1 课题背景2 实现效果**实现功能****可视化统计****web模块界面展示**3 LDA模型 4 情感分析方法**预处理**特征提取特征选择分类器选择实验 5 部分核心代码6 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 基于大数据…

【笔记】Blender4.0建模入门-1、2

Blender入门 ——邵发 1.1 课程介绍 Blender&#xff0c;一款3D建模软件&#xff0c;小乔、免费、全流程 常见的3D建模软件&#xff1a; - 3DsMax/Maya/Blender/Cinema4D/ZBrush...游戏影视 - Proe/Solidworks/Inventor/UG...工业建模 - SketchUp/Rhino/Revit...建筑设计 …

OpenWRT部署web服务并结合内网穿透实现公网远程访问内网网站

文章目录 前言1. 检查uhttpd安装2. 部署web站点3. 安装cpolar内网穿透4. 配置远程访问地址5. 配置固定远程地址 前言 uhttpd 是 OpenWrt/LuCI 开发者从零开始编写的 Web 服务器&#xff0c;目的是成为优秀稳定的、适合嵌入式设备的轻量级任务的 HTTP 服务器&#xff0c;并且和…

《剑指 Offer》专项突破版 - 面试题 8 : 和大于或等于 k 的最短子数组(C++ 实现)- 详解同向双指针(滑动窗口算法)

目录 前言 一、暴力求解 二、同向双指针&#xff08;滑动窗口算法&#xff09; 前言 题目链接&#xff1a;. - 力扣&#xff08;LeetCode&#xff09; 题目&#xff1a; 输入一个正整数组成的数组和一个正整数 k&#xff0c;请问数组中和大于或等于 k 的连续子数组的最短…

HMM算法(Hidden Markov Models)揭秘

序列数据 机器学习的数据通常有两类&#xff0c;最常见的是独立同分布数据&#xff0c;其次就是序列数据。对于前者&#xff0c;一般出现在各种分类/回归问题中&#xff0c;其最大似然估计是所有数据点的概率分布乘积。对于后者&#xff0c;一般出现在各种时间序列问题中&…

【Vue2】展开收起功能

一. 效果图 默认收起 点击展开 二. 实现 <template><div :class"showAll ? search_content : search_content_active"><span v-for"(item, index) in defaultTagsList" :key"index">{{item.name}}</span><div c…

vue前端开发自学demo,父子组件之间传递数据demo2

vue前端开发自学demo,父子组件之间传递数据demo2!实际上&#xff0c;组件之间传递数据的&#xff0c;数据类型&#xff0c;是可以多种多样的&#xff0c;下面为大家展示几个常见的数据类型&#xff0c;比如数字类型&#xff0c;数组类型&#xff0c;对象类型。 代码如下所示&a…

网上流量卡的硬核知识(二),让我们一口气了解

越来越多的关注小编平台的小伙伴问我&#xff0c;流量卡容易注销吗&#xff1f;为什么第一次在网上办的卡需要专属首充&#xff1f;我今天一次性给大家详细的讲明白&#xff0c;让大家再无后顾之忧&#xff0c;好好的过个年。 工信部要求2019年1月1日起在全国正式提供手机卡异地…