Flutter学习之旅 -网格布局

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.mfbz.cn/a/17070.html

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

相关文章

C++每日一练:小艺照镜子(详解分治法)

文章目录 前言一、题目二、解题1.分析 总结 前言 大过节的,不想去看人后脑勺,就做点题来玩。挑了小艺照镜子,百分通过~ 提示:以下是本篇文章正文内容,下面案例可供参考 一、题目 题目名称: 小艺照镜子 …

【Linux】生产者消费者模型

目录 一、生产者消费者模型 1、生产者消费者模型的概念 2、生产者、消费者之间的关系 3、生产者和消费者的特点 二、基于BlockingQueue的生产者消费者模型(条件变量控制同步与互斥) 1、一个生产线程和一个消费线程完成的计算任务 1.1BlockQueue.h…

Kubernetes服务搭建[配置-部署](Kubeadm)

文章目录 **[1 — 7] ** [ 配置K8S主从集群前置准备操作 ]一:主节点操作 查看主机域名->编辑域名1.1 编辑HOST 从节点也做相应操作1.2 从节点操作 查看从节点102域名->编辑域名1.3 从节点操作 查看从节点103域名->编辑域名 二:安装自动填充&…

进程地址空间与页表方面知识点(缺页中断及写时拷贝部分原理)

谢谢阅读,如有错误请大佬留言!! 目录 谢谢阅读,如有错误请大佬留言!! 抛出总结 开始介绍 发现问题 进程地址空间(虚拟地址) 页表 物理内存与进程地址空间映射 缺页中断基本…

Spring--AOP详细介绍--和详细代码演示证明理解

目录 Spring--AOP详细介绍 基本介绍 代码演示—入门 需求说明 定义一个接口类Vehicle 定义一个实现接口类的Car类 定义一个实现接口类的Ship类 创建测试类Test.java 来思考一下, 解决方案-动态代理方式-2 修改 Car类 修改 Ship类 创建VehicleProxyProvid…

Stable Diffusion使用方法

SD的本地安装教程有很多我就不重复了,这里主要是记录我在使用SD Webui的过程中遇到的问题,总结的一些提升出图效率,出好图概率的经验。 先搞几张看看效果 二次元妹妹 高达 ? Ok,以上只是一小部分成品 ,属…

PyQt5桌面应用开发(6):文件对话框

本文目录 PyQt5桌面应用系列介绍QFileDialog的静态接口QFileDialog的对象接口 示例结论后记 PyQt5桌面应用系列 PyQt5桌面应用开发(1):需求分析 PyQt5桌面应用开发(2):事件循环 PyQt5桌面应用开发&#xff…

MRI k空间概念整理

以下内容为MRI期末复习笔记,仅供复习参考使用。 K空间概念 K空间为包含MR数据的阵列,也可定义为原始数据阵列相位编码轴和频率编码轴的交叉点 MR扫描得到的数据为谱空间数据,谱空间数据与空间数据位置无直接对应关系 k空间每一数据点或数据…

不能使用chatGPT?这3个平替甚至比chatGPT更强

不能使用chatGPT?这3个平替甚至比chatGPT更强 chatGPT,一款由OpenAI开发的新型AI聊天机器人,正在势如破竹地改变着许多人的工作和生活方式。作为一款基于大语言模型的聊天机器人,chatGPT能够理解自然语言并进行人机对话。与传统的…

用于scATAC-seq有监督分类的Cellcano

细胞类型识别是单细胞数据分析的基本步骤。由于高质量参考数据集的可用性,有监督细胞分类方法在scRNA-seq数据中很受欢迎。染色质可及性分析(scATAC-seq)的最新技术进步为理解表观遗传异质性带来了新的见解。随着scATAC-seq数据集的不断积累&…

html5地理位置信息介绍, 百度地图使用

文章目录 1. HTML5中地理信息API1.1 Geolocation 接口 2. 在vue中使用百度地图3. 在react中使用百度地图 1. HTML5中地理信息API HTML5 的地理位置 API 可以让你获取用户的地理位置信息,并将其用于许多不同的应用场景,例如: 在地图上显示用…

钴基双金属氧化物储能材料的高效制备和电化学应用

一、引言 钴金属氧化物作为一类典型的储能材料,既可以用于锂离子电池负极材料,又可以用于超级电容器电极材料,因而备受关注 。在作为锂离子电池负极材料时,具有较高的理论比容量,但充放电体积变化较大、材料导电性较差…

爬虫为什么需要ip

爬虫需要使用爬虫ip主要是为了解决以下问题: 1、反爬虫机制:许多网站会设置反爬虫机制来防止爬虫程序的访问,例如限制IP地址的访问频率、检测访问来源等。使用爬虫ip可以绕过这些限制,使得爬虫程序更难被检测到。 2、访问限制&a…

浅拷贝和深拷贝

浅拷贝: 定义:浅拷贝(Shallow Copy)是一种简单的对象复制方式,将一个对象的数据成员直接复制给另一个对象(通常是通过默认的复制构造函数或赋值运算符实现),这些数据成员可以是基本…

JavaScript:字符串

文章目录 字符串344. 反转字符串reverse() 方法(打基础的时候,不要太迷恋库函数)代码及思路 541. 反转字符串 IIJavaScript String split() 方法JavaScript Array join() 方法代码分析见注释 剑指 Offer 05. 替换空格思路注意:上面…

网络基础学习:什么是网络与网络发展史

什么是网络与网络发展史 什么是网络?什么是网络发展史?分组交换技术TCP/IP技术Web技术ARPANET(1969年)Internet(1983年)万维网(1990年)移动互联网(2007年)物联…

KDGK-F断路器机械特性测试仪

一、产品概述 KDGK-F 断路器机械特性测试仪可用于各电压等级的真空、六氟化硫、少油、多油等电力系统高压开关的机械特性参数测试与测量。测量数据稳定,抗干扰性强,可在500KV等级及以下电站做实验,接线方便,操作简单,是…

第14章 项目采购管理

文章目录 采购管理包括如下几个过程14.2 编制采购计划 462编制采购计划的输出1)采购管理计划2)采购工作说明书3)采购文件 14.2.3 工作说明书(SOW) 14.3 实施采购 47414.3.2 实施采购的方法和技术 476(1&…

No.054<软考>《(高项)备考大全》【冲刺8】《软考之 119个工具 (6)》

《软考之 119个工具 (6)》 99.应急应对策略:100.风险在评估:101.风险审计:102.偏差和趋势分析:103.技术绩效测量:104.自制或外购分析:105.市场调研:106.投标人会议:107.建议书评价技术:108.独立核算:109.广告:110.采购谈判:111.合同变更控制系统:112.采购…

ArduPilot之GPS Glitch问题M8N模块配置

ArduPilot之GPS Glitch问题&M8N模块配置 1. 源由2. 现象3. 视频分析3.1 配置(不理想)3.2 配置优化3.3 优化配置短时间3D LockGlitch3.4 优化配置长时间3D DGPS Lock3.5 使用尽量多的卫星系统3.5.1 配置一3.5.2 配置二 3.6 同一时间段(M8N…
最新文章