本文将介绍一个新的内容 GridView,之前我们使用Container实现了一个网格效果,但只是为了学习组合widget,下面我们将通过GridView来实现网格效果
这里只介绍四种方式 实现网格布局,先看各实现代码,最后有完整版代码


1.extent

/*** 1.最常用的网格布局之extent*/
Widget _buildGrid1() {return new GridView.extent(//横轴的最大长度maxCrossAxisExtent: 180.0,padding: const EdgeInsets.all(4.0),//主轴间隔mainAxisSpacing: 4.0,//横轴间隔crossAxisSpacing: 4.0,children: _buildGridTileList(30),);
}

运行:


2.count

/*** 2.最常用的网格布局之count*/
Widget _buildGrid2() {return new GridView.count(//      横轴数量 这里的横轴就是x轴 因为方向是垂直的时候 主轴是垂直的crossAxisCount: 2,padding: const EdgeInsets.all(4.0),//主轴间隔mainAxisSpacing: 20.0,//横轴间隔crossAxisSpacing: 4.0,children: _buildGridTileList(30),);
}

运行:


3.滚动效果的ScrollView

/*** 3.滚动效果的ScrollView*/
Widget _buildGrid3() {return new CustomScrollView(primary: false,slivers: <Widget>[new SliverPadding(padding: const EdgeInsets.all(20.0),sliver: new SliverGrid.count(crossAxisSpacing: 10.0,//      横轴数量 这里的横轴就是x轴 因为方向是垂直的时候 主轴是垂直的crossAxisCount: 2,children: _buildGridTileList(30),),),],);
}

运行:


4.custom

/*** 4.GridView.custom*/
Widget _buildGrid4() {return new GridView.custom(gridDelegate: new SliverGridDelegateWithFixedCrossAxisCount(
//      横轴数量 这里的横轴就是x轴 因为方向是垂直的时候 主轴是垂直的crossAxisCount: 2,mainAxisSpacing: 4.0,crossAxisSpacing: 4.0,),childrenDelegate: new SliverChildBuilderDelegate((context, index) {return new Image.asset("images/shuang.jpg");},childCount: 30,),);
}

运行:


最后附上完整代码

// Copyright 2017 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
/*** GridView*/
import 'package:flutter/material.dart';import 'package:flutter/rendering.dart' show debugPaintSizeEnabled;void main() {
//  debugPaintSizeEnabled = true;runApp(new MyApp());
}class MyApp extends StatelessWidget {@overrideWidget build(BuildContext context) {return new MaterialApp(title: "GridView",home: new Scaffold(appBar: new AppBar(title: new Text("GridView"),),body: new MyGridView(),),);}
}class MyGridView extends StatefulWidget {@overrideState<StatefulWidget> createState() {return new MyGridViewState();}
}class MyGridViewState extends State<MyGridView> {@overrideWidget build(BuildContext context) {return new Center(child: _buildGrid3(),);}
}/*** 1.最常用的网格布局之extent*/
Widget _buildGrid1() {return new GridView.extent(//横轴的最大长度maxCrossAxisExtent: 180.0,padding: const EdgeInsets.all(4.0),//主轴间隔mainAxisSpacing: 4.0,//横轴间隔crossAxisSpacing: 4.0,children: _buildGridTileList(30),);
}/*** 2.最常用的网格布局之count*/
Widget _buildGrid2() {return new GridView.count(//      横轴数量 这里的横轴就是x轴 因为方向是垂直的时候 主轴是垂直的crossAxisCount: 2,padding: const EdgeInsets.all(4.0),//主轴间隔mainAxisSpacing: 20.0,//横轴间隔crossAxisSpacing: 4.0,children: _buildGridTileList(30),);
}/*** 3.滚动效果的ScrollView*/
Widget _buildGrid3() {return new CustomScrollView(primary: false,slivers: <Widget>[new SliverPadding(padding: const EdgeInsets.all(20.0),sliver: new SliverGrid.count(crossAxisSpacing: 10.0,//      横轴数量 这里的横轴就是x轴 因为方向是垂直的时候 主轴是垂直的crossAxisCount: 2,children: _buildGridTileList(30),),),],);
}/*** 4.GridView.custom*/
Widget _buildGrid4() {return new GridView.custom(gridDelegate: new SliverGridDelegateWithFixedCrossAxisCount(
//      横轴数量 这里的横轴就是x轴 因为方向是垂直的时候 主轴是垂直的crossAxisCount: 2,mainAxisSpacing: 4.0,crossAxisSpacing: 4.0,),childrenDelegate: new SliverChildBuilderDelegate((context, index) {return new Image.asset("images/shuang.jpg");},childCount: 30,),);
}List<Container> _buildGridTileList(int count) {return new List.generate(count,(int index) => new Container(child: new Image.asset("images/shuang.jpg"),));
}

我们只需要修改MyGridViewState 的child的函数名就可以运行查看不同的结果

Flutter的菜鸟教程九:GridView相关推荐

  1. Flutter的菜鸟教程

    Flutter的菜鸟教程一:第一个Flutter应用 Flutter的菜鸟教程二:最简单的MaterialApp Flutter的菜鸟教程三:Row/Column布局 Flutter的菜鸟教程四:Li ...

  2. 菜鸟教程android数据库,Flutter - Android 菜鸟教程打包

    icon.jpg 准备工作 1 App签名 创建keystore 如果已经有keystore请调至下一步 keytool -genkey -v -keystore ~/key.jks -keyalg ...

  3. Flutter的菜鸟教程二十五:Flutter字体

    本文学习在程序中使用自定义字体 https://fonts.google.com/?selection.family=Hanalei+Fill (有很多字体供选择)需翻墙,这里我们随便下载了一下用来演 ...

  4. Flutter的菜鸟教程十七:动画-渲染动画

    本文开始学习Flutter动画 渲染动画 AnimatedWidget简化 监视动画的过程(根据动画的状态 例如启动 停止 和翻转方向) 用AnimatedBuilder重构 并行动画 /*** 动画 ...

  5. 超级简单的Python爬虫教程,python爬虫菜鸟教程官网

    毫无基础的人如何入门 Python ? Python是一种计算机程序设计语言.你可能已经听说过很多种流行的编程语言,比如非常难学的C语言,非常流行的Java语言,适合初学者的Basic语言,适合网页编 ...

  6. 菜鸟教程 + Java基础课程 + part2

    菜鸟教程 + Java基础课程 + part2 目录 菜鸟教程 + Java基础课程 + part2 八 Number &Math 类 1. Number类 2. Math类 3. Numbe ...

  7. Flutter学习总纲教程

    Flutter学习总纲教程 Flutter Widget 目录 准备 学习Flutter之前,必须要了解(不需要多么精通,但至少要了解)Dart的基础特性. Dart基础特性  ·  Dart 是 G ...

  8. 全网最简单的C# json数据解析 无敌菜鸟教程 十分钟搞定json数据解析

    全网最简单的C# json数据解析 无敌菜鸟教程 十分钟搞定json数据解析 废话先说一点,算了.直接进入正题吧. 用例子说话: JSON数据: string json: " {" ...

  9. 菜鸟教程python3在线工具_3个非常实用的Python爬虫工具,你会几个?

    Xpath Helper 是一个面向 Xpath 初学者的 Google Chrome 插件.相对于人工找 Xpath 语法,Xpath Helper 可以实现自动分析.只要你打开一个网页,然后点击任 ...

最新文章

  1. 我被裁员了!让保安把身患绝症的我被强赶出公司,亲身经历的噩梦!
  2. pandas使用split函数将dataframe中的特定列表字段(list column)裂变为多个数据列并拼接到原dataframe中
  3. R获取股票数据并进行进行可视化分析
  4. Mybatis like模糊查询的写法
  5. 神经网络优化中的Weight Averaging
  6. 跑得好好的Java进程,怎么突然就瘫痪了?
  7. oracle 拼接多个列_ORACLE实现类似mysql的find_in_set
  8. linux 压缩权限,linux的基本操作(归档压缩,用户、权限管理,远程服务器构建和vi编辑器)...
  9. python读音有道-python利用有道翻译实现quot;语言翻译器”的功能
  10. java web/Maven项目结构分析
  11. vim 自动格式化代码快捷键
  12. 永磁同步电机dq坐标系中转矩公式中系数3/2的由来
  13. 微信开发者工具公众号网页调试跨域问题的解决
  14. 【MME】云CloudMain
  15. 内网穿透配置(FRP)
  16. 小技巧:不显示打印对话框直接打印网页到打印机
  17. 计算机选购配置项目活动,笔记本电脑选购活动计划.doc
  18. java中的LinkedList(链表)与ArrayList(动态数组):(1)简单辨析
  19. Direct3D 12 尝鲜: 基本呈现
  20. 教你如何购买笔记本电池

热门文章

  1. Linux文件系统(文件系统分类、创建磁盘分区、LVM)
  2. VideoProc 4K for Mac v4.5 4K视频处理转换工具
  3. Malvuln:安全研究员创建的恶意软件漏洞库
  4. 商业地产拓展市场调查报告内容及格式
  5. 解决Windows下python2和python3共存
  6. 小吃搜搜乐,弄点小吃数据放在本地、Python 爬虫小课 6-9
  7. java将oracle导出表sql文件中的insert批量更改为update
  8. 有什么可以在工作中做任务管理的便签应用
  9. 织梦主动提交_织梦CMS发表文章自动实现百度链接主动推送教程
  10. 【蓝桥杯嵌入式】第六届省赛程序题项目代码及讲解