题记

—— 执剑天涯,从你的点滴积累开始,所及之处,必精益求精。


​【x1】微信公众号的每日提醒 随时随记 每日积累 随心而过​

​【x2】各种系列的视频教程 免费开源 关注 你不会迷路​

​【x3】系列文章 百万 Demo 随时 复制粘贴 使用​

​【x4】本文章对应的讲解视频在这里​


本 Demo 实现的最终效果如下:

GridView 九宫格

flutter GridView 九宫格_Flutter项目开发

1 引言

GridView是常用可滚动组件之一,在Flutter中通常使用GridView构建二维网格列表,GridView创建方法有五种,描述如下

  • GridView的构造函数方法,一次性构建所有的子条目,适用于少量数据
  • GridView.builder方式来构建,懒加载模式,适用于大量数据的情况
  • GridView.count方式来构建,适用于固定列的情况,适用于少量数据 GridView.extent
    方式来构建,适用于条目有最大宽度的限制的情况,适用于少量数据的情况下
  • GridView.custom
    方式来构建,可配置子条目的排列规则也可配置子条目的渲染加载模式

2 滑动组件的公有属性

GridView也是滑动组件系列中的一个,它也有滑动组件一些公用的属性,简单描述如下:

 ///滑动方向 
Axis scrollDirection = Axis.vertical,
///是否滑动到底部
bool reverse = false,
///滑动控制器
ScrollController controller,
///是否使用默认的控制器
bool primary,
///滑动到边界时的回弹效果
ScrollPhysics physics,
///内边距
EdgeInsetsGeometry padding,

3 通过GridView的构造函数来创建

通过GridView的构造函数来构建,通过参数children来构建GridView中使用到的所有的子条目,通过参数gridDelegate配置SliverGridDelegate来配置子条目的排列规则。

SliverGridDelegate声明为abstract抽象的,所以需要使用它的子类来构建。

SliverGridDelegate有两个直接的子类SliverGridDelegateWithFixedCrossAxisCount和SliverGridDelegateWithMaxCrossAxisExtent。

通过SliverGridDelegateWithFixedCrossAxisCount来构建一个横轴为固定数量的子条目的GridView,如图1所示。

flutter GridView 九宫格_Flutter教程_02

对应代码如下:


///GridView的基本使用
class GridViewBaseUsePage extends StatefulWidget {
@override
State<StatefulWidget> createState() {
return ScrollHomePageState();
}
}

class ScrollHomePageState extends State {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: new AppBar(
title: Text("GridView基本使用"),
),
///构建九宫格数据数据
body: buildGridView1(),
// body: buildGridView2(),
);
}

  
///GridView 的基本使用
///通过构造函数来创建
Widget buildGridView1() {
return GridView(
///子Item排列规则
gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
//横轴元素个数
crossAxisCount: 3,
//纵轴间距
mainAxisSpacing: 10.0,
//横轴间距
crossAxisSpacing: 10.0,
//子组件宽高长度比例
childAspectRatio: 1.4),
///GridView中使用的子Widegt
children: buildListViewItemList(),
);
}


///GridView 的基本使用
///通过custom方式来创建
Widget buildGridView() {
return GridView.custom(
cacheExtent: 200,
///子Item排列规则
gridDelegate: SliverGridDelegateWithMaxCrossAxisExtent(
///子Item的最大宽度
maxCrossAxisExtent: 100,
//纵轴间距
mainAxisSpacing: 10.0,
//横轴间距
crossAxisSpacing: 10.0,
//子组件宽高长度比例
childAspectRatio: 1.4,
),
///子条目的构建模式
childrenDelegate:
///懒加载的模式
SliverChildBuilderDelegate((BuildContext context, int index) {
return buildListViewItemWidget(index);
}));
}


  List<Widget> buildListViewItemList(){
List<Widget> list = [];
///模拟的8条数据
for (int i = 0; i < 8; i++) {
list.add(buildListViewItemWidget(i));
}
return list;
}

///创建GridView使用的子布局
Widget buildListViewItemWidget(int index) {
return new Container(
///内容剧中
alignment: Alignment.center,

///根据角标来动态计算生成不同的背景颜色
color: Colors.cyan[100 * (index % 9)],
child: new Text('grid item $index'),
);
}
}


其他4中创建方式请在公众号中回复 九宫格 查看


flutter GridView 九宫格_Flutter教程_03