Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Flutter 中 GridView网格列表组件的使用

Flutter 中 GridView网格列表组件的使用

作者头像
越陌度阡
发布于 2020-12-22 07:40:07
发布于 2020-12-22 07:40:07
3.8K00
代码可运行
举报
运行总次数:0
代码可运行

当数据量很大的时候用矩阵方式排列比较清晰,此时我们可以用网格列表组件 GridView 实现布局。

GridView 创建网格列表有多种方式,主要有以下两种:

1. GridView.count 实现网格布局;

2. GridView.builder 实现网格布局;

常用属性:

1. scrollDirection 滚动方向。值的类型为 Axis;

2. padding 内边距。值的类型为 EdgeInsets;

3. reverse 反向排序。值的类型为bool;

4. crossAxisSpacing 水平子组件的内边距。值的类型为double;

5. mainAxisSpacing 垂直子组件的内边距。值的类型为double;

6. crossAxisCount 一行的子组件的数量。值的类型为int;

7. childAspectRatio 子组件的宽高比例。值的类型为double;

8. children 子组件。值的类型为Widget;

9. gridDelegate 网格代理。主要用在 GridView.builder 里面控制布局,主要有以下两种值类型:

(1). SliverGridDelegateWithFixedCrossAxisCount(常用);

(2). SliverGridDelegateWithMaxCrossAxisExtent;

1. 用GridView.count 创建网格布局。

动态循环生成的数据创建网格列表。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import 'package:flutter/material.dart';

void main(){
    runApp(MyApp());
}

// 抽离成一个单独的组件
class MyApp extends StatelessWidget{
    @override
    Widget build(BuildContext context) {
        return MaterialApp(
            home: Scaffold(
                // 导航条
                appBar:AppBar(title:Text('Flutter App')),
                // 主体
                body:HomeContent(),
            ),
            theme: ThemeData(primarySwatch:Colors.yellow),
        );
    }
}

// 动态循环生成的数据创建网格列表
class HomeContent extends StatelessWidget{
   List<Widget> _getData(){
        List<Widget> list = new List();
        for(int i =0;i<20;i++){
            list.add(Container(
                alignment: Alignment.center,
                child:Text(
                    '这是第$i条数据',
                    style:TextStyle(
                        fontSize: 20.0,
                        color:Colors.red
                    )
                ),
                color:Colors.blue,
                // 在GridView中高度设置不管用
                height:500.0
            ));
        }
        return list;  
    }
    @override
    Widget build(BuildContext context) {
        // 网格构造器
        return  GridView.count(
            // 定义列数
            crossAxisCount: 2,
            // 定义列边距
            crossAxisSpacing: 20.0,
            // 定义行边距
            mainAxisSpacing: 20.0,
            // 定义内边距
            padding: EdgeInsets.all(10.0),
            // 宽度和高度的比例(变相的调整了高度)
            childAspectRatio: 0.8,
            // 子元素
            children: this._getData()
        );
    }
}

效果图如下:

用本地模拟的静态数据创建网格列表,以下是数据模拟:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// lib/res/listData.dart

List listData = [
    {
        "title": 'Candy Shop',
        "author": 'Mohamed Chahin',
        "imageUrl": 'https://www.itying.com/images/flutter/1.png',
    },
    {
        "title": 'Childhood in a picture',
        "author": 'Google',
        "imageUrl": 'https://www.itying.com/images/flutter/2.png',
    },
    {
        "title": 'Alibaba Shop',
        "author": 'Alibaba',
        "imageUrl": 'https://www.itying.com/images/flutter/3.png',
    },
    {
        "title": 'Candy Shop',
        "author": 'Mohamed Chahin',
        "imageUrl": 'https://www.itying.com/images/flutter/4.png',
    },
    {
        "title": 'Tornado',
        "author": 'Mohamed Chahin',
        "imageUrl": 'https://www.itying.com/images/flutter/5.png',
    },
    {
        "title": 'Undo',
        "author": 'Mohamed Chahin',
        "imageUrl": 'https://www.itying.com/images/flutter/6.png',
    },
    {
        "title": 'white-dragon',
        "author": 'Mohamed Chahin',
        "imageUrl": 'https://www.itying.com/images/flutter/7.png',
    }
];

导入模拟的数据,生成列表。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import 'package:flutter/material.dart';
import 'res/listData.dart';

void main(){
    runApp(MyApp());
}

// 抽离成一个单独的组件
class MyApp extends StatelessWidget{
    @override
    Widget build(BuildContext context) {
        return MaterialApp(
            home: Scaffold(
                // 导航条
                appBar:AppBar(title:Text('Flutter App')),
                // 主体
                body:HomeContent(),
            ),
            theme: ThemeData(primarySwatch:Colors.yellow),
        );
    }
}


// 用本地模拟的静态数据创建网格列表
class HomeContent extends StatelessWidget{

    List <Widget> _getListData(){
        var tempList = listData.map((obj){
            return Container(
                // 子元素
                child:Column(
                    // 子元素
                    children: <Widget>[
                        // 图片
                        Image.network(obj['imageUrl']),
                        // 图片与文字的间隔使用
                        SizedBox(height:12),
                        // 文字
                        Text(
                            obj['title'],
                            textAlign:TextAlign.center,
                            style:TextStyle(fontSize: 18)
                        ),
                    ],
                ),
                // 装饰
                decoration: BoxDecoration(
                    // 边框
                    border:Border.all(
                        // 颜色
                        color:Color.fromRGBO(233, 233, 233, 0.8),
                        // 边框宽度
                        width:1.0
                    )
                ),
            );
        });
        return tempList.toList();
    }
    @override
    Widget build(BuildContext context) {
        // 网格构造器
        return  GridView.count(
            // 定义列数
            crossAxisCount: 2,
            // 定义列边距
            crossAxisSpacing: 20.0,
            // 定义行边距
            mainAxisSpacing: 20.0,
            // 定义内边距
            padding: EdgeInsets.all(10.0),
            // 宽度和高度的比例(变相的调整了高度)
            // childAspectRatio: 0.8,
            // 子元素
            children: this._getListData()
        );
    }
}

效果图如下:

2. 用 GridView.builder 实现网格布局。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import 'package:flutter/material.dart';
import 'res/listData.dart';

void main(){
    runApp(MyApp());
}

// 抽离成一个单独的组件
class MyApp extends StatelessWidget{
    @override
    Widget build(BuildContext context) {
        return MaterialApp(
            home: Scaffold(
                // 导航条
                appBar:AppBar(title:Text('Flutter App')),
                // 主体
                body:HomeContent(),
            ),
            theme: ThemeData(primarySwatch:Colors.yellow),
        );
    }
}



// 用flutter的builder生成网格
class HomeContent extends StatelessWidget{
    Widget _getListData(context,index){
        return Container(
            // 子元素
            child:Column(
                // 子元素
                children: <Widget>[
                    // 图片
                    Image.network(listData[index]['imageUrl']),
                    // 图片与文字的间隔使用
                    SizedBox(height:12),
                    // 文字
                    Text(
                        listData[index]['title'],
                        textAlign:TextAlign.center,
                        style:TextStyle(fontSize: 18)
                    ),
                ],
            ),
            // 装饰
            decoration: BoxDecoration(
                // 边框
                border:Border.all(
                    // 颜色
                    color:Color.fromRGBO(233, 233, 233, 0.8),
                    // 边框宽度
                    width:1.0
                )
            ),
        );
    }

    @override
    Widget build(BuildContext context) {
        // 网格构造器
        return  GridView.builder(
            // 定义网格相关样式
            gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
                // 定义列
                crossAxisCount: 2,
                // 横向间隙
                mainAxisSpacing: 10.0,
                // 纵向间隙
                crossAxisSpacing: 10.0,
            ),
            // 数据数量
            itemCount: listData.length,
            // 所有数据
            itemBuilder:this._getListData
        );
    }
}

效果图如下:

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020/12/19 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Flutter中GridView网格列表组件的使用
当数据量很大的时候用矩阵方式排列比较清晰,此时我们可以用网格列表组件 GridView 实现布局。
越陌度阡
2022/05/06
3.8K0
Flutter中GridView网格列表组件的使用
5.Flutter学习之GridView组件
学习自: Dart Flutter教程_Dart Flutter入门实战视频教程-2019年新出.
易帜
2022/02/09
3890
5.Flutter学习之GridView组件
Flutter入门(二)
* Padding(个人感觉和Container很像)(下面的代码很难看,重要的是思路)
用户3112896
2019/12/27
6030
Flutter入门(二)
Flutter开发:Gridview的使用
Flutter开发中,表格组件是经常要用到的,表格展示数据也是App开发过程中不可缺少的需求的功能,其实Gridview的属性和ListView的属性很接近,那么本篇文章就来聊聊Flutter开发中表格组件Gridview的简单使用。
三掌柜
2022/04/12
7580
Flutter开发:Gridview的使用
Flutter组件随笔练习
Container组件 import 'package:flutter/material.dart'; //快捷方式:fim void main() { runApp(MyApp()); } //自定义组件 class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { // TODO: implement build return MaterialApp(
明知山
2020/09/02
9960
GridView组件初体验
前文我们聊了Flutter的ListView组件,其类似于OC中的UITableView;今天我们来聊聊GridView组件,其实现的效果类似于OC中的UICollectionView。
拉维
2019/08/12
5550
Flutter 中 ListView 动态数据生成列表
1. 循环数据,生成列表效果。 import 'package:flutter/material.dart'; void main(){ runApp(MyApp()); } // 抽离成一个单独的组件 class MyApp extends StatelessWidget{ @override Widget build(BuildContext context) { return MaterialApp( home: Scaffold(
越陌度阡
2020/12/22
3.4K0
Flutter 中 ListView 动态数据生成列表
Flutter 中 Padding、Row 、Column 、Expanded 组件详解
在 html 中常见的布局标签都可以使用 padding 属性,但是 Flutter 中很多 Widget 是没有 padding 属 性,这个时候我们可以用 Padding 组件处理容器与子元素直接的间距。
越陌度阡
2020/12/22
1.8K0
Flutter 中 Padding、Row 、Column 、Expanded 组件详解
Flutter中AspectRatio、Card 卡片组件
AspectRatio 首先会在布局限制条件允许的范围内尽可能的扩展,widget 的高度是由宽度和比率决定的,类似于 BoxFit 中的 contain,按照固定比率去尽量占满区域。
越陌度阡
2020/12/23
1.8K0
Flutter中AspectRatio、Card 卡片组件
Flutter组件基础——GridView
GridView是网格布局,类似于iOS中的UICollectionView,可设置每行多少个、单个对象的宽高比、对象水平方向的间距、垂直方向的间距等等。
莫空9081
2021/07/23
1.4K0
Flutter中ListView 垂直列表组件、水平列表组件
列表布局是项目开发中最常用的一种布局方式,Flutter 中我们可以通过 ListView 来定义列表项,支持垂直和水平方向展示。
越陌度阡
2022/05/06
1.6K0
Flutter中ListView 垂直列表组件、水平列表组件
Flutter 中 ListView 垂直列表组件、水平列表组件
列表布局是项目开发中最常用的一种布局方式,Flutter 中我们可以通过 ListView 来定义列表项,支持垂直和水平方向展示。
越陌度阡
2020/12/21
2K0
Flutter 中 ListView 垂直列表组件、水平列表组件
Flutter入门(一)
Flutter的sdk地址https://flutter.dev/docs/development/tools/sdk/releases
用户3112896
2019/12/27
7230
Flutter入门(一)
Flutter可滑动组件
移动端数据量比较大时,一般都是通过列表来进行展示的,比如商品数据、聊天列表、通信录、朋友圈等。
白白白小艾
2022/03/24
7.4K0
Flutter | 滚动组件,ListView,GridVIew等
当组件内容超过当前显示视口(ViewPort)时,如果没有特殊处理,Flutter 就会提示 Overflow 错误,为此,Flutter 提供了多种可滚动组件,用于显示列表和长布局;
345
2022/02/11
8.9K0
Flutter | 滚动组件,ListView,GridVIew等
flutter组件之GridView.builder()
如果您的 Flutter 应用程序需要显示大量或无限数量项目的网格视图(例如,从 API 获取的产品列表),那么您应该使用GridView.builder()而不是GridView()。该生成器()只为那些确实可见,所以您的应用程序的性能将得到改善
徐建国
2021/08/02
2.2K0
flutter GridView 九宫格
GridView是常用可滚动组件之一,在Flutter中通常使用GridView构建二维网格列表,GridView创建方法有五种,描述如下
早起的年轻人
2020/07/10
1.5K0
flutter GridView 九宫格
《Flutter》-- 6.高级组件
在Flutter中,一个可滚动的组件直接或间接包含一个Scrollable组件,它是可滚动组件的基础组件。
爱学习的程序媛
2022/04/07
11K0
《Flutter》-- 6.高级组件
flutter系列之:flutter中常用的GridView layout详解
GridView是一个网格化的布局,如果在填充的过程中子组件超出了展示的范围的时候,那么GridView会自动滚动。
程序那些事
2022/09/13
7700
flutter系列之:flutter中常用的GridView layout详解
GridView是一个网格化的布局,如果在填充的过程中子组件超出了展示的范围的时候,那么GridView会自动滚动。
程序那些事
2022/12/07
9540
flutter系列之:flutter中常用的GridView layout详解
相关推荐
Flutter中GridView网格列表组件的使用
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验