介绍

GridViewListView的大多数参数都是相同的,它们的含义也都相同,

唯一需要关注的是gridDelegate参数,类型是SliverGridDelegate,它的作用是控制GridView子组件如何排列(layout)

Flutter中提供了两个SliverGridDelegate的子类SliverGridDelegateWithFixedCrossAxisCountSliverGridDelegateWithMaxCrossAxisExtent

SliverGridDelegateWithFixedCrossAxisCount

该子类实现了一个横轴为固定数量子元素的layout算法

crossAxisCount 横轴子元素的数量
mainAxisSpacing 主轴方向的间距
crossAxisSpacing 横轴方向子元素的间距
childAspectRatio

子元素在横轴长度和主轴长度的比例。

由于crossAxisCount指定后,子元素横轴长度就确定了,然后通过此参数值就可以确定子元素在主轴的长度

可以发现,子元素的大小是通过crossAxisCountchildAspectRatio两个参数共同决定的。注意,这里的子元素指的是子组件的最大显示空间,注意确保子组件的实际大小不要超出子元素的空间。

可以有以下两种定义方式

GridView(gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(crossAxisCount: 3, //横轴三个子widgetchildAspectRatio: 1.0 //宽高比为1时,子widget)
)GridView.count( crossAxisCount: 3,childAspectRatio: 1.0,
)

SliverGridDelegateWithMaxCrossAxisExtent

该子类实现了一个横轴子元素为固定最大长度的layout算法

maxCrossAxisExtent为子元素在横轴上的最大长度,之所以是“最大”长度,是因为横轴方向每个子元素的长度仍然是等分的,举个例子,如果ViewPort的横轴长度是450,那么当maxCrossAxisExtent的值在区间[450/4,450/3)内的话,子元素最终实际长度都为112.5,而childAspectRatio所指的子元素横轴和主轴的长度比为最终的长度比。其它参数和SliverGridDelegateWithFixedCrossAxisCount相同。

两种方式是等价的

GridView(padding: EdgeInsets.zero,gridDelegate: SliverGridDelegateWithMaxCrossAxisExtent(maxCrossAxisExtent: 120.0,childAspectRatio: 2.0 //宽高比为2),children: <Widget>[Icon(Icons.ac_unit),Icon(Icons.airport_shuttle),Icon(Icons.all_inclusive),Icon(Icons.beach_access),Icon(Icons.cake),Icon(Icons.free_breakfast),],
);GridView.extent(maxCrossAxisExtent: 120.0,childAspectRatio: 2.0,children: <Widget>[Icon(Icons.ac_unit),Icon(Icons.airport_shuttle),Icon(Icons.all_inclusive),Icon(Icons.beach_access),Icon(Icons.cake),Icon(Icons.free_breakfast),],);

GridView.builder

import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';void main() {runApp(MyAppText());
}class MyAppText extends StatelessWidget {@overrideWidget build(BuildContext context) {return MaterialApp(home: Scaffold(appBar: AppBar(backgroundColor: Colors.red,title: Text('GridView练习'),textTheme:TextTheme(title: TextStyle(fontSize: 18, color: Colors.yellow)),),body: GridViewClass(),),);}
}class GridViewClass extends StatelessWidget {@overrideWidget build(BuildContext context) {List<String>list=new List();list.add('https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1591940844156&di=f1c754f5753835912ddf00f763e13e65&imgtype=0&src=http%3A%2F%2Fgss0.baidu.com%2F9vo3dSag_xI4khGko9WTAnF6hhy%2Fzhidao%2Fpic%2Fitem%2Ffd039245d688d43fb6973ae77d1ed21b0ef43bec.jpg');list.add('https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1591940844156&di=21132fe8a0731c3f3823a2602b5bb6c3&imgtype=0&src=http%3A%2F%2Fe.hiphotos.baidu.com%2Fzhidao%2Fpic%2Fitem%2F023b5bb5c9ea15ce1274e73ab4003af33a87b26e.jpg');list.add('https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1591940844155&di=21f352bf854d3546967dd9c5f199c467&imgtype=0&src=http%3A%2F%2Fimg1.lukou.com%2Fstatic%2Fp%2Fblog%2Fmedium%2F0007%2F15%2F94%2F26%2F7159426.jpg');list.add('https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1591940844154&di=66885dff3735acc2170b4c3c6290ef03&imgtype=0&src=http%3A%2F%2Fcbu01.alicdn.com%2Fimg%2Fibank%2F2016%2F415%2F534%2F3377435514_434466171.jpg');list.add('https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1591940844152&di=732c41d365e9c0c25c95745f6c12b96e&imgtype=0&src=http%3A%2F%2F5b0988e595225.cdn.sohucs.com%2Fq_70%2Cc_zoom%2Cw_640%2Fimages%2F20181220%2F4866e7e0dd434dc9aa8da2c6ccc436d6.jpg');return GridView.builder(itemCount: list.length,gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(crossAxisCount: 4,childAspectRatio: 1),itemBuilder: (BuildContext context,var index){return Image.network(list[index],fit: BoxFit.fill,);});}
}

Flutter组件学习(19)GridView相关推荐

  1. Flutter组件学习(二)—— Image

    序言 上一节中,我们讲了 Flutter 中 Text 组件的一些用法以及 API,本节我们继续学习 Flutter 中的 Image 组件,同样先上图: Image组件的构造方法 在 Android ...

  2. Flutter组件学习(13)层叠布局Stack、Positioned

    介绍 层叠布局和Web中的绝对定位.Android中的Frame布局是相似的,子组件可以根据距父容器四个角的位置来确定自身的位置.绝对定位允许子组件堆叠起来(按照代码中声明的顺序) Stack ali ...

  3. Flutter组件学习(7)输入框TextField

    目录 常用属性介绍 TextFild应用 TextEditingController 光标位置 常用属性介绍 decoration     设置输入框的外观 InputDecoration,decor ...

  4. Flutter组件学习之自定义画板绘制圆形——筑梦之路

    import 'package:flutter/material.dart';/*** 自定义画板* 绘制圆形*/ void main() => runApp(new MyApp());clas ...

  5. Flutter学习笔记--Gridview网格组件制作相册

    Flutter学习笔记–Gridview网格组件制作相册 效果: GridView可以构建一个二维网格列表,其官方定义参考: https://book.flutterchina.club/chapte ...

  6. 【Flutter学习】组件学习之目录

    01. Flutter组件-Layout-Container-容器  02. Flutter组件-Text-Text-文本  03. Flutter组件-Text-RichText-富文本  04. ...

  7. flutter 九宫格菜单_flutter GridView 九宫格

    我收集了一些学习用的资料,其中包含了很多学习,面试,中高进阶fluuter资料,还有很多视频详解,如果有同学想进一步了解,详情请看文末.也欢迎各路大神门前来装X. 1 引言 GridView是常用可滚 ...

  8. dart语言Flutter组件表

    Image组件中可用的属性 Image组件的构造方法来加载图片资源 Image对象的属性来控制图片的渲染效果 属性名 意义 值类型 alignment 设置图片的对齐方式 AlignmentGeome ...

  9. Flutter新手入门常用组件总结,让你了解更多的Flutter组件?

    Flutter常用组件 1.MaterialApp 2.Scaffold 3.Container 4.BoxDecoration(装饰器) 5.Row(横向排布) 6.Column(纵向排布) 7.E ...

最新文章

  1. 厉害了,教你用 Spring Boot 控制并发登录人数
  2. GraphPad Prism 9 如何一次处理多张图表?
  3. linux查找文件限制时间,Linux查找命令find与文件三种时间
  4. mybatis简单案例源码详细【注释全面】——实体层(Role.java)
  5. php 地址栏url,php 如何隐藏url地址栏参数
  6. Way to MongoDB
  7. 解决:未能找到 CodeDom 提供程序类型 Microsoft.VJSharp.VJSharpCodeProvider
  8. ffmpeg转码保留时间戳
  9. 风吹衣袖,月上西楼- 一个技术人员的心声
  10. Android init.rc on property
  11. 从word中无损批量导出图片
  12. 奇点云完成A轮融资,晨兴资本领投
  13. 《淘宝网开店 拍摄 修图 设计 装修 实战150招》一一
  14. 风袖第一阶段小程序wx.request封装
  15. java高清无损图片压缩
  16. 直流马达驱动_ADC_PWM加减速(STM32F4 CubeMX)
  17. 出来找工作,去创业公司好吗?
  18. Bash-shell
  19. 3 在统一建模语言中(UML)中,( )用于描述系统与外部系统及用户之间的交互
  20. RequireJS简介

热门文章

  1. Oracle如何预估将要创建的索引和表的大小
  2. 配置 default Jenkinsfile 文件
  3. 幽默感七个技巧_每天学点幽默口才:怎样培养说话的幽默感
  4. Python锁屏代码
  5. postgres启动服务器时missing or erroneous pg_hba.conf file
  6. Python3,3行代码生成有颜色的进度条,这波操作秀儿都点赞。
  7. 密位测距离口诀_战争雷霆历史模式炮术教学 历史模式测距方法详解
  8. 基于DSPS的主机修改
  9. matlab画直交圆柱面,两个直交圆柱面的交线
  10. 2018美国RSA大会专题 | 宇宙最全中文议程