flutter-GridView使用

这篇具有很好参考价值的文章主要介绍了flutter-GridView使用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

先看效果

flutter-GridView使用,flutter经验,flutter,javascript,前端

代码实现

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 让容器被内容撑满文章来源地址https://www.toymoban.com/news/detail-631062.html

到了这里,关于flutter-GridView使用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 安卓中GridView的使用

    一、概述 GridView(网格视图)是按照行列的方式来显示内容的,一般用于显示图片,图片文字等内容,比如实现十六宫格,九宫格,四宫格等,用GridView是首选,也是最简单的。 常用属性: Android:columnWidth:设置列的宽度。 android:gravity:设置此组件中的内容在组件中的位置。可

    2024年02月16日
    浏览(34)
  • Android studio之GridView使用

    效果图: 代码: UserGridviewAdapter UserGridviewBean MainActivity item activity_main.xml

    2024年02月11日
    浏览(52)
  • 使用JavaScript给图片添加图片水印的前端实现方法

    当涉及图片处理时,JavaScript是一种强大的工具。在本篇博客中,我们将学习如何使用JavaScript来给图片添加水印,并将其封装成一个函数,以便在需要的时候重复使用。 在开始之前,确保你已经准备好了以下内容:         1.一张待添加水印的图片。         2.水印图片。

    2024年03月15日
    浏览(60)
  • 前端使用 JavaScript 检测用户是否在线的6种方法

    1. 使用 navigator.onLine 属性: navigator.onLine 是一个布尔值,表示用户是否与互联网连接。当用户在线时,该属性的值为 true ,当用户离线时,该属性的值为 false 。可以通过监听 online 和 offline 事件来检测用户的在线状态变化。 2. 使用 navigator.connection 对象:` navigator.connection 对象

    2024年02月11日
    浏览(33)
  • 【前端灵魂脚本语言JavaScript⑤】——JS中数组的使用

    🐚 作者: 阿伟 💂 个人主页: Flyme awei 🐋 希望大家多多支持😘一起进步呀! 💬 文章对你有帮助👉关注✨点赞👍收藏📂 第一种: var 数组名 = new Array(); 创建一个空数组 第二种: var arr2 = new Array(10); 创建一个定长为10的数组 第三种 var arr3 = new Array(a,b,c); 创建时直接指定元素值

    2023年04月08日
    浏览(57)
  • 在DevExpress的GridView的列中,使用RepositoryItemSearchLookUpEdit控件实现产品列表信息的展示和选择

    有时候,我们为了方便,我们往往使用扩展函数的代码方式创建很多GridView的操作功能,如在随笔《在DevExpress中使用BandedGridView表格实现多行表头的处理》中介绍过多行表头的创建及绑定处理,在《基于DevExpress的GridControl实现的一些界面处理功能》也介绍了一些特殊的展示效

    2024年02月07日
    浏览(36)
  • JavaScript前端中的伪类元素before和after使用详解

    在前端开发中,伪类是一种让你可以选择元素的某个状态或位置的 CSS 选择器。其中, :before 和 :after 伪类允许你在一个元素之前或之后插入内容。 :before 和 :after 伪类创建的元素是不在 HTML 文档中的,它们是通过 CSS 生成的。可以用它们来在一个元素的前面或后面插入一些内

    2024年02月14日
    浏览(39)
  • flutter使用shared_preferences依赖库实现简单的本地数据存储,封装成一个简单的单例类,方便前端同学使用

    shared_preferences 仓库地址:shared_preferences | Flutter Package shared_preferences这个依赖库还是非常好用的,全平台支持,就像前端经常使用的localstorage一样方便,所以就想着封装成一个简单的类,方便前端同学使用。封装好的代码支持json或者数组等这种类型的存储和获取。 在utils里面

    2024年01月20日
    浏览(48)
  • Lottie--前端动画效果--UI输出json格式--lottie动画在JavaScript中使用

    Lottie一个适用于Web、Android、iOS、React Native和Window的移动库,它可以使用Bodymovin解析以json格式导出的Adobe After Effects动画,并再移动设备上进行本地渲染。 1.需要引入JavaScript文件,我使用的是cdn中的链接。这里直接上链接,按需取用。点这里 2.json格式的文件 我不是UI啊,我也

    2023年04月09日
    浏览(47)
  • flutter开发实战-inappwebview实现flutter与Javascript方法调用

    flutter开发实战-inappwebview实现flutter与Javascript方法调用 在使用inappwebview时候,需要flutter端与JS进行交互,调用相应的方法,在inappwebview中的JavaScript Handlers。 要添加JavaScript Handlers,可以使用InAppWebViewController.addJavaScriptHandler方法,在该方法中定义handlerName和JavaScript端调用它时要

    2024年02月03日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包