Flutter学习之旅 -网格布局

news/2024/12/4 17:14:01/

文章目录

      • GridView列表三种形式
        • 常用属性
      • 小案例

GridView列表三种形式

  • 可以通过GridView.count实现网格布局
/*
格式:
GridView.count(crossAxisCount: 一行显示数量,children: [component(),...],)
*/
class MyHomePage extends StatelessWidget {const MyHomePage({Key? key}) : super(key: key);Widget build(BuildContext context) {return GridView.count(crossAxisCount: 3,children: const [Icon(Icons.home),Icon(Icons.settings),Icon(Icons.all_inclusive),Icon(Icons.ac_unit)],);}
}
  • 可以通过GridView.extent实现网格布局
class MyHomePage extends StatelessWidget {const MyHomePage({Key? key}) : super(key: key);Widget build(BuildContext context) {return GridView.extent(maxCrossAxisExtent: 40, //主要。横轴子元素为固定最大长度(自动计算)children: const [Icon(Icons.home),Icon(Icons.settings),Icon(Icons.ac_unit),Icon(Icons.time_to_leave),],);}
}
  • 可以通过GridView.builder实现网格布局

参数:可以通过SliveGridDelegateWithFiexdCrossAxisCount来设置GridView.count
参数: 可以通过SliveGridDelegateWithMaxCrossAxisExtent来设置GridView.extent

List listData = [{"imageUrl": "http://124.223.18.34:5555/static/images/gdyg/gdyg1_1.jpg","name": "孤独摇滚第1集"},{"imageUrl": "http://124.223.18.34:5555/static/images/gdyg/gdyg1_2.jpg","name": "孤独摇滚第2集"},{"imageUrl": "http://124.223.18.34:5555/static/images/gdyg/gdyg1_3.jpg","name": "孤独摇滚第3集"}
];
class MyHomePage extends StatelessWidget {const MyHomePage({Key? key}) : super(key: key);Widget _initDataWidget(context, index) {return Container(padding: const EdgeInsets.all(5),decoration: BoxDecoration(color: Colors.blue, borderRadius: BorderRadius.circular(5)),child: Column(children: [Image.network(listData[index]["imageUrl"]),Text(listData[index]["name"],style: const TextStyle(color: Colors.white),),],),);}Widget build(BuildContext context) {return GridView.builder(padding: const EdgeInsets.all(10),itemCount: listData.length, //重点不然会报错(一直循环下去)gridDelegate: const SliverGridDelegateWithFixedCrossAxisCount(crossAxisCount: 2, crossAxisSpacing: 10),itemBuilder: _initDataWidget);}
}

常用属性

名称类型说明
scrollDirectionAxis滚动方法
paddingEdgeInsetsGeometry内边距
resolvebool组件反向排序
crossAxisSpacingdouble水平子Widget之间间距
mainAxisSpacingdouble垂直子Widget之间间距
crossAxisCountint,用在GridView.count一行的Widget数量
maxCrossAxisExtentdouble用在GridView.extent横轴子元素的最大长度
childAspectRatiodouble子Widget宽高比例
children[]
gridDelegateSliveGridDelegateWithFiexdCrossAxisCountSliveGridDelegateWithFiexdCrossAxisCount;SliveGridDelegateWithMaxCrossAxisExtent控制布局主要用在GridView.builder里面

小案例

class MyHomePage extends StatelessWidget {const MyHomePage({Key? key}) : super(key: key);Widget build(BuildContext context) {return GridView.count(padding: const EdgeInsets.all(15),mainAxisSpacing: 15, //垂直子widget之间的间距crossAxisSpacing: 15, //水平子Widget之间的间距crossAxisCount: 2,//childAspectRatio: 1.2,//宽高比children: [Container(// padding: EdgeInsets.,decoration: BoxDecoration(color: Colors.blue, borderRadius: BorderRadius.circular(5)),child: Image.network("http://124.223.18.34:5555/static/images/gdyg/gdyg1_1.jpg",alignment: Alignment.topCenter,fit: BoxFit.contain,),),Container(decoration: BoxDecoration(color: Colors.blue, borderRadius: BorderRadius.circular(5)),child: Image.network("http://124.223.18.34:5555/static/images/gdyg/gdyg1_2.jpg",alignment: Alignment.topCenter,fit: BoxFit.contain,),),Container(decoration: BoxDecoration(color: Colors.blue, borderRadius: BorderRadius.circular(5)),child: Image.network("http://124.223.18.34:5555/static/images/gdyg/gdyg1_3.jpg",alignment: Alignment.topCenter,fit: BoxFit.contain,),)],);}
}

在这里插入图片描述

class MyHomePage extends StatelessWidget {const MyHomePage({Key? key}) : super(key: key);Widget build(BuildContext context) {return GridView.count(padding: const EdgeInsets.all(15),mainAxisSpacing: 15, //垂直子widget之间的间距crossAxisSpacing: 15, //水平子Widget之间的间距crossAxisCount: 2,//childAspectRatio: 1.2,//宽高比children: [Container(// padding: EdgeInsets.,decoration: BoxDecoration(color: Colors.blue, borderRadius: BorderRadius.circular(5)),child: Column(children: [Image.network("http://124.223.18.34:5555/static/images/gdyg/gdyg1_1.jpg",alignment: Alignment.topCenter,fit: BoxFit.contain,width: 530,height: 110,),const Text("孤独摇滚第一集",style: TextStyle(color: Colors.white,),)],)),Container(decoration: BoxDecoration(color: Colors.blue, borderRadius: BorderRadius.circular(5)),child: Column(children: [Image.network("http://124.223.18.34:5555/static/images/gdyg/gdyg1_2.jpg",alignment: Alignment.topCenter,fit: BoxFit.contain,width: 530,height: 110,),const Text("孤独摇滚第二集",style: TextStyle(color: Colors.white,),)],)),Container(decoration: BoxDecoration(color: Colors.blue, borderRadius: BorderRadius.circular(5)),child: Column(children: [Image.network("http://124.223.18.34:5555/static/images/gdyg/gdyg1_3.jpg",alignment: Alignment.topCenter,fit: BoxFit.contain,width: 530,height: 110,),const Text("孤独摇滚第三集",style: TextStyle(color: Colors.white,),)],))],);}
}

在这里插入图片描述


http://www.ppmy.cn/news/81444.html

相关文章

Java+vue生成报纸排版新闻页面

您可以按照以下步骤使用JavaVue实现生成报纸排版的新闻页面: 准备后端环境:Java Servlet或Spring Boot框架;根据需要定义Sql数据库表、字段、实体类等相关信息;使用Mybatis或Hibernate框架实现数据库访问操作;定义前端…

Redis缓存穿透、击穿、雪崩问题及其解决方法

Redis缓存穿透、击穿、雪崩问题及其解决方法 1 缓存穿透1.1 概念及其解决思路1.2 编码解决商品查询的缓存穿透问题: 2 缓存雪崩问题及解决思路3 缓存击穿问题及解决思路3.1 利用互斥锁解决缓存击穿问题3.2 利用逻辑过期解决缓存击穿问题 1 缓存穿透 1.1 概念及其解…

Hadoop集群常见错误

(一)启动hadoop集群时易出现的错误: 1. 错误现象:java.net.NoRouteToHostException: No route to host. 原因:master服务器上的防火墙没有关闭。 解决方法: 在master上关闭防火墙: chkconfig iptables off. 2. …

Python学习笔记——《吴恩达Machine Learning》线性回归例程

文章目录 案例背景线性回归(Loss Regression)梯度下降法(批量梯度下降算法——batch gradient descent)计算成本函数和梯度下降使用线性回归拟合训练数据模型预测 梯度下降效果可视化完整版demo 案例背景 详情参照吴恩达机器学习…

小程序设计与用户体验(上)

本章主要介绍小程序的设计、交互和用户体验。学习者将会学到: 小程序设计的基本原则设计小程序的用户交互、动画和视觉效果提高小程序的用户体验 学习本章内容可使学生对小程序的设计理念有更深入的掌握,并具备制定用户体验方案的能力。 小程序设计的…

代码随想录算法训练营15期 Day 2 | 977.有序数组的平方 、209.长度最小的子数组 、59.螺旋矩阵II 、总结

977.有序数组的平方 题目建议&#xff1a; 本题关键在于理解双指针思想 题目链接&#xff1a;力扣 思路一&#xff1a;暴力解算&#xff0c;直接将所有元素变成一个平方&#xff0c;然后进行排序。 class Solution { public:vector<int> sortedSquares(vector<int&g…

MySQL数据库---笔记2

MySQL数据库---笔记2 一、函数1.1、字符串函数1.2、数值函数1.3、日期函数1.4、流程函数 二、约束2.1、概述2.2、演示2.3、外键约束2.4、外键删除更新行为 三、多表查询3.1、多表关系介绍3.2、 概述3.3、内连接3.4、外连接3.4、自连接3.5、联合查询union3.6、子查询3.6.1、标量…

day16 - 提取图像前景

在我们平时使用购物软件是会发现通常在搜索框右侧都会有一个相机的标志&#xff0c;这个标志是可以让用户通过图片来搜索自己需要购买的内容。拍照购物将用户拍摄的商品与商品图库的图像进行对比&#xff0c;找到最为相似的商品。但是由于用户拍摄的图像是任意的随机的&#xf…