flutter 实战 之 GridView

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

flutter gridview,flutter

GridViewListView 是 Flutter 中用于构建滚动列表的两种常见小部件。它们之间的主要区别在于它们的布局方式和如何显示其子小部件。

  1. 布局方式:

    • ListView 是单列或单行的滚动列表,它垂直或水平滚动。可以根据需要垂直排列或水平排列子小部件。
    • GridView 是一个二维网格列表,可以在垂直和水平方向上滚动。子小部件以行和列的形式进行排列。
  2. 子小部件排列:

    • ListView 的子小部件是单列(或单行)排列的,依次从顶部到底部(或从左到右)排列。它适合于在一个方向上展示大量垂直或水平排列的数据。
    • GridView 的子小部件是以二维网格的形式排列的,可以按行或列展示。根据不同的构造函数,可以设置子小部件在交叉轴上的方式,例如可以设置为垂直或水平方向。
  3. 子小部件数量:

    • ListView 的子小部件数量可以是有限的或无限的。它可以使用一个 ListBuilder 来动态构建子小部件列表。
    • GridView 的子小部件数量也可以是有限的或无限的。它可以使用 gridDelegate 属性来配置网格的排列方式,以及使用 childrenchildrenDelegateBuilder 来设置子小部件。
  4. 适用场景:

    • ListView 适用于在一个方向上展示大量的数据,例如聊天记录、商品列表等。
    • GridView 适用于将数据以网格的形式展示,例如照片墙、图标展示等。

下面展示一个简单网格布局
flutter gridview,flutter

 代码实现也很简单

Widget build(BuildContext context) {
    return GridView.count(crossAxisCount: 3,
      children: [
        Icon(ItyingFont.icon1,color: Colors.green,),
        Icon(ItyingFont.icon2,color: Colors.amberAccent,),
        Icon(ItyingFont.icon3,color: Colors.blue,),
        Icon(Icons.add,color:Colors.pink,),
        Icon(Icons.access_time,color: Colors.purple,),
        Icon(Icons.add_alert_sharp,color: Colors.cyanAccent,),
        Icon(Icons.ac_unit,color: Colors.cyanAccent,),
        Icon(Icons.access_time_outlined,color: Colors.amber,),
        Icon(Icons.access_time_filled,color: Colors.deepPurpleAccent,),

      ],
    );
  }

crossAxisCount 是列组件的数量,由自己定义,再用children来装载内容
上面这个代码是通过GridView.count 来实现,下面用GridView.extent来实现,与GridView.count不同的是 GridView.extent 通过 maxCrossAxisExtent (组件的最大长度)来控制一行有多少个组件
 

Widget build(BuildContext context) {
    return GridView.extent(maxCrossAxisExtent: 150.0,   //每个组件的最大长度
      children: [
      Icon(ItyingFont.icon1,color: Colors.green,),
    Icon(ItyingFont.icon2,color: Colors.amberAccent,),
    Icon(ItyingFont.icon3,color: Colors.blue,),
    Icon(Icons.add,color:Colors.pink,),
    Icon(Icons.access_time,color: Colors.purple,),
    Icon(Icons.add_alert_sharp,color: Colors.cyanAccent,),
    Icon(Icons.ac_unit,color: Colors.cyanAccent,),
    Icon(Icons.access_time_outlined,color: Colors.amber,),
    Icon(Icons.access_time_filled,color: Colors.deepPurpleAccent,),

      ],
    );
  }

那如果要实现下面的效果呢?

flutter gridview,flutter

 用 GridView.count 怎么实现呢,看代码
 


class Page extends StatelessWidget {
  Page({Key? key}) : super(key: key);

  List<Widget> _initGridViewData() {
    List<Widget> temlist = [];

    for (var i = 0; i < 12; i++) {
      temlist.add(
        Container(
          alignment: Alignment.center,
          decoration: BoxDecoration(
            color: Colors.amber,
          ),
          child: Text(
            "第${i}个元素",
            style: TextStyle(
              fontSize: 20.0,
            ),
          ),
        ),
      );
    }

    return temlist;
  }

  @override
  Widget build(BuildContext context) {
    return GridView.count(
        padding: EdgeInsets.all(10),
        //一列排布的组件的个数
        crossAxisCount: 3,
        //水平子 Widget 之间的间距
        crossAxisSpacing: 10.0,
        //垂直子 Widget 之间的间距
        mainAxisSpacing: 10.0,
        // 宽高比
        childAspectRatio: 0.7,
        children: _initGridViewData());
  }
}
那要是用 GridView.extend 呢
@override
  Widget build(BuildContext context) {
    return GridView.extent(
        padding: EdgeInsets.all(10),
        //每个组件的最大长度
        maxCrossAxisExtent: 120,
        //水平子 Widget 之间的间距
        crossAxisSpacing: 10.0,
        //垂直子 Widget 之间的间距
        mainAxisSpacing: 10.0,
        // 宽高比
        childAspectRatio: 0.7,
        children: _initGridViewData());
  }
如何实现下面的效果呢

 看看代码如下
 文章来源地址https://www.toymoban.com/news/detail-770241.html

import 'package:flutter/material.dart';
// import 'package:hive/hive.dart';
import 'package:pivot_chat/widgets/button/_PCHomePageButton.dart';

class test extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          leading: IconButton(
            onPressed: () {},
            icon: Icon(
              ItyingFont.icon1,
              color: Colors.pinkAccent,
            ),
          ),
        ),
        body: Page(),
      ),
    );
  }
}

class Page extends StatelessWidget {
  Page({Key? key}) : super(key: key);

  Widget _initGridViewData(context ,int  index) {

      return Container(
          height: 200,
        // 设置一个 外边框
          decoration: BoxDecoration(
            border: Border.all(
              color: Colors.black12
            )
          ),
        child: Column(
          children: [
            Image.network("${listData[index]["imageUrl"]}",height:180 ,),
            SizedBox(height: 10,),
            Text("${listData[index]["title"]}",
            style: TextStyle(
              fontSize: 18,
            ),
            ),
          ],
        ),
      );
  }

  @override
  Widget build(BuildContext context) {
    return GridView.builder(
        padding: EdgeInsets.all(10),
        itemCount:listData.length ,
        gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
          crossAxisCount: 2,
          mainAxisSpacing: 10,
          crossAxisSpacing: 10,
          childAspectRatio: 0.7,


        ),
        itemBuilder:_initGridViewData,

    );
  }
}

List listData = [
  {
    "title": 'Candy Shop',
    "author": "Mohanmed Chin",
    "imageUrl": "https://p.qqan.com/up/2021-7/16275387033501829.jpg",
  },
  {
    "title": 'Candy Shop',
    "author": "Mohanmed Chin",
    "imageUrl":
        "https://pic1.zhimg.com/v2-b59b1fe5c979f7cb7cdde7bf788a4f3a_r.jpg?source=1940ef5c",
  },
  {
    "title": 'Candy Shop',
    "author": "Mohanmed Chin",
    "imageUrl":
        "https://pic2.zhimg.com/v2-d6d0c956d30aa63894cc1cc96901ce07_r.jpg?source=1940ef5c",
  },
  {
    "title": 'Candy Shop',
    "author": "Mohanmed Chin",
    "imageUrl":
        "https://ts1.cn.mm.bing.net/th/id/R-C.0382d85bc77f87547a0d263d727ac78a?rik=DeEpYNkFDhNYwQ&riu=http%3a%2f%2f5b0988e595225.cdn.sohucs.com%2fimages%2f20190815%2f2422bae53bbe495eadb8c35e4115f971.JPG&ehk=EXo1y564J33smY0E4iRbb%2b6Uf8x9szvNt480zkQXHyk%3d&risl=&pid=ImgRaw&r=0",
  },
  {
    "title": 'Candy Shop',
    "author": "Mohanmed Chin",
    "imageUrl":
        "https://tse1-mm.cn.bing.net/th/id/OIP-C.aBs3l0c_sS5UmTWOaK7wgAAAAA?pid=ImgDet&rs=1",
  },
  {
    "title": 'Candy Shop',
    "author": "Mohanmed Chin",
    "imageUrl":
        "https://pic2.zhimg.com/v2-8176dbd89ee8edecf5956bae2dd0642d_r.jpg?source=1940ef5c",
  },
  {
    "title": 'Candy Shop',
    "author": "Mohanmed Chin",
    "imageUrl":
        "https://ts1.cn.mm.bing.net/th/id/R-C.7538a1d27d1eb2bdaf4f7fe5171d3bb4?rik=Xo3lEaJdBdyZQQ&riu=http%3a%2f%2fdesk.fd.zol-img.com.cn%2fg5%2fM00%2f02%2f0F%2fChMkJlbK7JeIFhACAArOl2v-eCMAALKjgJtPOEACs6v923.jpg&ehk=o0LZfd%2fE2nk5E2n%2fxNapnr%2fCMkZLHYMbO25hE4LLq60%3d&risl=&pid=ImgRaw&r=0",
  },
  {
    "title": 'Candy Shop',
    "author": "Mohanmed Chin",
    "imageUrl":
        "https://ts1.cn.mm.bing.net/th/id/R-C.c316b5a061d2e6f534ea4669efaf4202?rik=CcnSN0WU9U1clA&riu=http%3a%2f%2fpic.bizhi360.com%2fbbpic%2f6%2f1106.jpg&ehk=HKvV9IRto0udrSWZrpOzTssWQ3oJBuwMAbT1T%2bKEWQw%3d&risl=&pid=ImgRaw&r=0",
  },
];

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

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

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

相关文章

  • flutter开发实战-多语言flutter intl

    flutter开发实战-多语言flutter intl 之前做的应用中有用到多语言,一直没有整理,这里整理一下多语言设置流程。 使用的是Android studio 使用Android studio安装flutter_intl 插件,更新或者安装flutter_intl 插件后会提示重新启动IDE。 如图所示: 在Android Studio中菜单Tools找到flutter intl创建

    2024年02月13日
    浏览(42)
  • GridView的绑定,添加,删除,更改;

    GridView的绑定,添加,删除,更改; 在用GridView控件时候的操作如下 用的的数据库如下 接下来是gridview的使用 前台代码如下 后台代码如下 结果如下

    2024年02月11日
    浏览(46)
  • QT quick基础:组件gridview

    组件gridview与android中gridview布局效果相同。 一、下面记录qt quick该组件的使用方法。 方法一: 运行效果 方法二: 列表和代理分开。 效果图如上。 我自己的需求,点击gridview的item,修改对应item的图片,并且改变该item的字体颜色。上述代码中,Image没有点击信号,gridview也没

    2024年01月19日
    浏览(43)
  • Android studio之GridView使用

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

    2024年02月11日
    浏览(55)
  • flutter开发实战-webview插件flutter_inappwebview使用

    flutter开发实战-webview插件flutter_inappwebview使用 在开发过程中,经常遇到需要使用WebView,Webview需要调用原生的插件来实现。常见的flutter的webview插件是webview_flutter,flutter_inappwebview。之前整理了一下webview_flutter,查看https://blog.csdn.net/gloryFlow/article/details/131683122 这里我们使用fl

    2024年02月07日
    浏览(51)
  • flutter开发实战-MethodChannel实现flutter与iOS双向通信

    flutter开发实战-MethodChannel实现flutter与iOS双向通信 最近开发中需要iOS与flutter实现通信,这里使用的MethodChannel 如果需要flutter与Android实现双向通信,请看 https://blog.csdn.net/gloryFlow/article/details/132218837 这部分与https://blog.csdn.net/gloryFlow/article/details/132218837中的一致,这里实现一下

    2024年02月13日
    浏览(58)
  • flutter开发实战-inappwebview实现flutter与Javascript方法调用

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

    2024年02月03日
    浏览(47)
  • Flutter系列文章-实战项目

    在本篇文章中,我们将通过一个实际的 Flutter 应用来综合运用最近学到的知识,包括保存到数据库、进行 HTTP 请求等。我们将开发一个简单的天气应用,可以根据用户输入的城市名获取该城市的天气信息,并将用户查询的城市列表保存到本地数据库中。 1. 确定项目目标 我们

    2024年02月13日
    浏览(35)
  • Flutter Flar动画实战

    在Flare动面出现之前,Flare动画大体可以分为使用AnimationController控制的基础动画以及使用Hero的转场动画,如果遇到一些复杂的场景,使用这些动画方案实现起来还是有难度的。不过,随着Flutter开始支持Flare矢量动面,Flutter的动画开发也变得越来越简单。事实上,Flare动画是一

    2024年02月14日
    浏览(36)
  • flutter开发实战-MethodChannel实现flutter与原生Android双向通信

    flutter开发实战-MethodChannel实现flutter与原生Android双向通信 最近开发中需要原生Android与flutter实现通信,这里使用的MethodChannel MethodChannel:用于传递方法调用(method invocation)。 通道的客户端和宿主端通过传递给通道构造函数的通道名称进行连接 一个应用中所使用的所有通道名称

    2024年02月13日
    浏览(40)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包