flutter-GridView使用

先看效果

代码实现

import 'package:app/common/util/k_log_util.dart';
import 'package:app/gen/assets.gen.dart';
import 'package:app/pages/widget/top_appbar.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:timeago/timeago.dart';

class PopKkCoinGrants extends StatefulWidget {
  const PopKkCoinGrants({super.key});

  @override
  State<PopKkCoinGrants> createState() => _PopKkCoinGrantsState();
}

class _PopKkCoinGrantsState extends State<PopKkCoinGrants> {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: TopAppBar(context, ""),
      body: Container(
          margin: EdgeInsets.all(15.r),
          child: SingleChildScrollView(
            child: Column(children: [
              _topStaticInfo(),
              _topCountDown(),
              _pastGrantsListTop(),
              _pastGrantsList()
            ]),
          )),
    );
  }

  /// 顶部信息
  Widget _topStaticInfo() {
    return Column(children: [
      Assets.image.kKCoin.image(width: 80.r),
      SizedBox(
        height: 11.r,
      ),
      Text(
        "KKCoin Grants",
        style: TextStyle(
          color: Colors.white,
          fontSize: 16.sp,
          fontWeight: FontWeight.w500,
        ),
        textAlign: TextAlign.center,
      ),
      SizedBox(
        height: 15.r,
      ),
      Padding(
        padding: EdgeInsets.symmetric(horizontal: 5.r),
        child: Text(
          "There are 10 billion KKcoin tokens, and most will be given to unique humans with a verified Konnect ID.",
          style: TextStyle(
            color: const Color(0xff676970),
            fontSize: 13.sp,
            fontWeight: FontWeight.w500,
            height: 1.5,
            leadingDistribution: TextLeadingDistribution.even,
          ),
          textAlign: TextAlign.center,
        ),
      ),
    ]);
  }

  /// 顶部倒计时
  Widget _topCountDown() {
    return Container(
      decoration: BoxDecoration(
        color: const Color(0xff25272B),
        borderRadius: BorderRadius.all(Radius.circular(20.r)),
      ),
      padding: EdgeInsets.all(25.r),
      margin: EdgeInsets.only(top: 25.r, bottom: 25.r),
      child: Row(children: [
        Assets.image.kKCoin.image(width: 56.r),
        SizedBox(
          width: 15.r,
        ),
        Column(
          crossAxisAlignment: CrossAxisAlignment.start,
          children: [
            Text(
              "Next grant",
              style: TextStyle(
                color: const Color(0xff676970),
                fontWeight: FontWeight.w500,
                fontSize: 12.sp,
              ),
            ),
            SizedBox(
              height: 5.r,
            ),
            Text(
              "28 Jul",
              style: TextStyle(
                color: Colors.white,
                fontWeight: FontWeight.w500,
                fontSize: 17.sp,
              ),
            ),
          ],
        ),
        Expanded(child: Container()),
        Text(
          "21:52:19",
          style: TextStyle(
            color: Colors.white,
            fontSize: 14.sp,
            fontWeight: FontWeight.w400,
          ),
        )
      ]),
    );
  }

  // 列表部分 头
  Widget _pastGrantsListTop() {
    return Padding(
      padding: EdgeInsets.only(bottom: 19.r),
      child: Row(children: [
        Text("Past grants",
            style: TextStyle(
              color: Colors.white,
              fontSize: 15.sp,
              fontWeight: FontWeight.w600,
            )),
        Expanded(child: Container()),
        Text(
          "07/2023",
          style: TextStyle(
            color: Color(0xff676970),
            fontWeight: FontWeight.w500,
            fontSize: 12.sp,
          ),
        )
      ]),
    );
  }

  // 列表部分
  Widget _pastGrantsList() {
    return GridView.builder(
        physics: const NeverScrollableScrollPhysics(),
        shrinkWrap: true,
        itemCount: 10,
        gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
          //横轴元素个数
          crossAxisCount: 2,
          //纵轴间距
          mainAxisSpacing: 15.r,
          //横轴间距
          crossAxisSpacing: 15.r,
          //子组件宽高长度比例
          childAspectRatio: 165 / 105,
        ),
        itemBuilder: (_, position) {
          KLogUtil.d(position);
          return _pastGrantsListItem(position / 2 == 0);
        });
  }

  // 列表一项
  Widget _pastGrantsListItem(bool isPrimary) {
    TextStyle curStyle = isPrimary ? _textStyleWhite() : _textStyleGray();
    DecorationImage curBgImage = isPrimary ? _imagePrimary() : _imageGray();
    return Container(
      width: 165.r,
      height: 105.r,
      decoration: BoxDecoration(
        borderRadius: BorderRadius.circular(10.r),
        image: curBgImage,
      ),
      child: Stack(children: [
        Positioned(
          top: 54.r,
          left: 10.r,
          child: Row(
            children: [
              Text(
                "DATE",
                style: curStyle,
              ),
              SizedBox(
                width: 22.r,
              ),
              Text(
                "26 / 07 / 2023",
                style: curStyle,
              )
            ],
          ),
        ),
        Positioned(
          top: 80.r,
          left: 10.r,
          child: Row(
            children: [
              Text(
                "KKCoin",
                style: curStyle,
              ),
              SizedBox(
                width: 12.r,
              ),
              Text(
                "256.23",
                style: curStyle,
              )
            ],
          ),
        ),
      ]),
    );
  }

  // 白色文字样式
  TextStyle _textStyleWhite() {
    return TextStyle(
      color: Colors.white,
      fontSize: 11.sp,
      fontWeight: FontWeight.w400,
    );
  }

  // 灰色的文字样式
  TextStyle _textStyleGray() {
    return TextStyle(
      color: Color(0xff45474D),
      fontWeight: FontWeight.w500,
      fontSize: 11.sp,
    );
  }

  // 灰色背景
  DecorationImage _imageGray() {
    return DecorationImage(
      image: Assets.image.pastGrantsGray.provider(),
      fit: BoxFit.cover,
    );
  }

  // 主色背景
  DecorationImage _imagePrimary() {
    return DecorationImage(
      image: Assets.image.pastGrantsPrimary.provider(),
      fit: BoxFit.cover,
    );
  }
}

关键部分

GridView.builder(
        physics: const NeverScrollableScrollPhysics(),
        shrinkWrap: true,
        itemCount: 10,
        gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
          //横轴元素个数
          crossAxisCount: 2,
          //纵轴间距
          mainAxisSpacing: 15.r,
          //横轴间距
          crossAxisSpacing: 15.r,
          //子组件宽高长度比例
          childAspectRatio: 165 / 105,
        ),
        itemBuilder: (_, position) {
          KLogUtil.d(position);
          return _pastGrantsListItem(position / 2 == 0);
        });
  }

其中physics属性  physics: const NeverScrollableScrollPhysics()会禁止页面滚动

shrinkWrap 让容器被内容撑满

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

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

相关文章

使用idea实现git操作大全(在项目开发中遇到的实际情况

使用idea实现git操作大全&#xff08;在项目开发中遇到的实际情况&#xff09; 1.安装git插件2.在开发中切记拉一个自己的分支 1.安装git插件 2.在开发中切记拉一个自己的分支 选中需要拉的分支&#xff0c;右键该分支&#xff0c;选中new breach from “分支”&#xff0c;点…

《数据中台实践指南(1.0 版)》发布,大数据技术标准推进委员会、联合行业专家、头部企业共同编制

导读 大数据技术标准推进委员会牵头&#xff0c;联合行业专家和头部企业共同编制《数据中台实践指南&#xff08;1.0 版&#xff09;》&#xff0c;梳理数据中台历史及概念&#xff0c;明确数据中台的核心能力&#xff0c;总结数据中台建设的前提条件和不同形态&#xff0c;给…

csdn崩溃了?每次都卡

反馈给了官方客服也没有响应&#xff0c;最近几周都是这样的高频率的转圈圈&#xff01;这个入口不受重视&#xff1f;这个对于csdn用户来说&#xff0c;是最最基本的入口 如果CSDN&#xff08;CSDN.net&#xff09;崩溃了&#xff0c;可能会对以下方面产生影响&#xff1a; 开…

Docker Compose构建lnmp

目录 Compose的优点 编排和部署 Compose原理 Compose应用案例 安装docker-ce 阿里云镜像加速器 安装docker-compose docker-compose用法 Yaml简介 验证LNMP环境 Compose的优点 先来了解一下我们平时是怎么样使用docker的&#xff1f;把它进行拆分一下&#xff1a; 1…

任务14、无缝衔接,MidJourney瓷砖(Tile)参数制作精良贴图

14.1 任务概述 在这个实验任务中,我们将深入探索《Midjourney Ai绘画》中的Tile技术和其在艺术创作中的具有挑战性的应用。此任务将通过理论学习与实践操作相结合的方式,让参与者更好地理解Tile的核心概念,熟练掌握如何在Midjourney平台上使用Tile参数,并实际运用到AI绘画…

运维作业—5

一.基于 CentOS 7 构建 LVS-DR 群集 1.配置LVS 2.第一台real server&#xff08;192.168.100.139:80&#xff09; 手工在RS端绑定VIP 手工在RS端抑制ARP响应 3.第二台real server&#xff08;192.168.100.140:80&#xff09; 安装arptables并启动 使用arptables实现抑制 测试…

解决Vs Code工具开发时 保存React文件时出现乱码情况

Vs Code工具开发时 保存React文件时出现乱码情况 插件库搜索:JS-CSS-HTML Formatter 把这个插件禁用或者卸载就解决保存时出现乱码的问题了; 如果没有解决,再看下面方案! 出现乱码问题通常是因为文件的编码格式不正确。您可以尝试以下解决方法&#xff1a; 确认文件编码格式&a…

以太网帧格式与吞吐量计算

以太网帧结构 帧大小的定义 以太网单个最大帧 6&#xff08;目的MAC地址&#xff09; 6&#xff08;源MAC地址&#xff09; 2&#xff08;帧类型&#xff09; 1500{IP数据包[IP头&#xff08;20&#xff09;DATA&#xff08;1480&#xff09;]} 4&#xff08;CRC校验&#xff…

MySQL(1)

MySQL创建数据库和创建数据表 创建数据库 1. 连接 MySQL mysql -u root -p 2. 查看当前的数据库 show databases; 3. 创建数据库 create database 数据库名; 创建数据库 4. 创建数据库时设置字符编码 create database 数据库名 character set utf8; 5. 查看和显示…

目前Java后端就业前景怎么样?

前言 并不乐观&#xff0c;看看现在的就业形式就知道了&#xff0c;基本上是僧多粥少的情况&#xff0c;你可能会看到很多编程语言排行榜或者流行榜中Java的排名很高&#xff0c;如同下面这种&#xff1a; 看排名确实可以粗略的得知语言当下的流行度、使用率&#xff0c;但是它…

Gof23设计模式之享元模式

1.定义 运用共享技术来有效地支持大量细粒度对象的复用。它通过共享已经存在的对象来大幅度减少需要创建的对象数量、避免大量相似对象的开销&#xff0c;从而提高系统资源的利用率。 2.结构 享元&#xff08;Flyweight &#xff09;模式中存在以下两种状态&#xff1a; 内…

webpack基础知识三:说说webpack中常见的Loader?解决了什么问题?

一、是什么 loader 用于对模块的"源代码"进行转换&#xff0c;在 import 或"加载"模块时预处理文件 webpack做的事情&#xff0c;仅仅是分析出各种模块的依赖关系&#xff0c;然后形成资源列表&#xff0c;最终打包生成到指定的文件中。如下图所示&#…

使用 RediSearch 在 Redis 中进行全文检索

原文链接&#xff1a; 使用 RediSearch 在 Redis 中进行全文检索 Redis 大家肯定都不陌生了&#xff0c;作为一种快速、高性能的键值存储数据库&#xff0c;广泛应用于缓存、队列、会话存储等方面。 然而&#xff0c;Redis 在原生状态下并不支持全文检索功能&#xff0c;这使…

linux初始命令

如果没有ip地址&#xff0c;配置&#xff1a; 查看当前时间&#xff1a; 指定格式查看时间&#xff1a; 修改时间&#xff1a; 查看时区&#xff1a; 设置时区&#xff1a; 查看当前工作目录&#xff1a; root的家目录就是根&#xff0c;普通用户家目录是home

ctfshow-web7

0x00 前言 CTF 加解密合集 CTF Web合集 0x01 题目 0x02 Write Up 通过尝试&#xff0c;发现是数字型的注入&#xff0c;并且同样是过滤了空格 判断字段 获取一下flag即可 1/**/union/**/select/**/1,flag,3/**/from/**/web7.flag#&passworda以上

MySQL日期常见的函数

-- 获取当天日期 -- 2023-06-20 select curdate();-- 获取当天年月日时分秒 select now();-- 日期运算 -- 2024-06-20 17:04:17 select date_add(now(),interval 1 year);-- 日期比较 -- 0 select datediff(now(),now());-- 日期MySQL对于日期类型数据如何查询 -- 获取指定日期…

【果树农药喷洒机器人】Part4:果树冠层图像实例分割模型优化

文章目录 一、引言二、数据集制作2.1图像采集2.2图像标注与增强 三、构建柑橘树冠实例分割模型结构3.1优化特征提取网络3.2U-Net替换FCN 一、引言 为准确获取柑橘树冠的生长信息&#xff0c;实现果树喷药机器人的精准喷施&#xff0c;对处于多种生长阶段的柑橘树冠进行图像分割…

ffmpeg源码编译成功,但是引用生成的静态库(.a)报错,报错位置在xxx_list.c,报错信息为某变量未定义

背景&#xff1a;本文是对上一个文章的补充&#xff0c;在源码编译之前&#xff0c;项目是有完整的ffmpeg编译脚本的&#xff0c;只不过新增了断点调试ffmpeg&#xff0c;所以产生的上面的文章&#xff0c;也就是说&#xff0c;我在用make编译成功后&#xff0c;再去做的源码编…

dfs之卒的遍历

题面 题目描述 在一张nm 的棋盘上&#xff08;如 6 行 7 列&#xff09;的最左上角(1,1) 的位置有一个卒。该卒只能向下或者向右走&#xff0c;且卒采取的策略是先向下&#xff0c;下边走到头就向右&#xff0c;请问从(1,1) 点走到 (n,m) 点可以怎样走&#xff0c;输出这些走法…

【软件工程】5 ATM系统测试

目录 5 ATM系统测试 5.1 单元测试 5.1.1 制定单元测试计划 5.1.2 设计单元测试用例 ​编辑 5.1.3 执行单元测试 5.1.4 单元测试报告 5.2 集成测试 5.2.1 制定集成测试计划 5.2.2 设计集成测试用例 5.2.3 执行集成测试 5.2.4 集成测试总结 5.3 系统测试 5.3.1 制定…