首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >Flutter 零基础入门(三十):GridView 网格布局 —— 九宫格与商品列表必学

Flutter 零基础入门(三十):GridView 网格布局 —— 九宫格与商品列表必学

作者头像
LarryLan
发布2026-01-27 14:59:22
发布2026-01-27 14:59:22
1372
举报

GridView 网格布局 —— 九宫格与商品列表必学

如果说 ListView 是「信息流之王」, 那 GridView 就是:

电商 App、图片墙、九宫格页面的绝对核心

你在 App 中看到的这些页面:

  • 商品列表
  • 九宫格入口
  • 图片瀑布流
  • 功能面板

📌 本质上,全都是 GridView

一、什么是 GridView?

一句话理解:

GridView = 可以滚动的网格布局

对比一下:

组件

布局方式

ListView

一列

GridView

多列


二、最常见的使用场景

你以后几乎一定会用到 GridView 的地方:

  • 首页九宫格入口
  • 商品列表页
  • 图片展示页
  • 分类页面

三、GridView.count(最容易上手)

这是 新手最推荐的写法

1️⃣ 基本结构

代码语言:javascript
复制
GridView.count(
  crossAxisCount: 2,
  children: [],
)

📌 参数解释:

  • crossAxisCount:一行多少列

2️⃣ 一个最简单的示例

代码语言:javascript
复制
GridView.count(
  crossAxisCount: 3,
  children: [
    Container(color: Colors.red),
    Container(color: Colors.blue),
    Container(color: Colors.green),
    Container(color: Colors.orange),
  ],
)

你会看到:

  • 一行 3 个
  • 自动换行
  • 可以滚动

四、GridView + List 数据渲染

和 ListView 一样,GridView 也几乎一定是配合 List 使用的


1️⃣ 数据准备

代码语言:javascript
复制
List<String> imageList = [
  '商品1',
  '商品2',
  '商品3',
  '商品4',
  '商品5',
];

2️⃣ 使用 map 生成网格

代码语言:javascript
复制
GridView.count(
  crossAxisCount: 2,
  children: imageList.map((item) {
    return Container(
      margin: EdgeInsets.all(8),
      color: Colors.grey[300],
      child: Center(
        child: Text(item),
      ),
    );
  }).toList(),
)

📌 你会发现:

GridView 和 ListView 的使用方式几乎一模一样


五、GridView 的常用参数(非常重要)

1️⃣ 主轴 / 交叉轴间距

代码语言:javascript
复制
GridView.count(
  crossAxisCount: 2,
  mainAxisSpacing: 10,
  crossAxisSpacing: 10,
)
  • mainAxisSpacing:纵向间距
  • crossAxisSpacing:横向间距

2️⃣ 子元素宽高比(关键)

代码语言:javascript
复制
childAspectRatio: 0.7,

📌 含义:

宽 / 高

  • 1.0:正方形
  • < 1:偏高(商品卡片常用)
  • > 1:偏宽

六、封装商品卡片(真实项目写法)

1️⃣ 商品卡片 Widget

代码语言:javascript
复制
Widget buildGridItem(String title) {
  return Container(
    decoration: BoxDecoration(
      color: Colors.white,
      borderRadius: BorderRadius.circular(8),
      boxShadow: [
        BoxShadow(
          color: Colors.black12,
          blurRadius: 4,
        ),
      ],
    ),
    child: Column(
      crossAxisAlignment: CrossAxisAlignment.start,
      children: [
        // 图片区域
        Expanded(
          child: Container(
            color: Colors.grey[300],
            child: Center(child: Text('图片')),
          ),
        ),
        Padding(
          padding: EdgeInsets.all(8),
          child: Text(
            title,
            maxLines: 2,
            overflow: TextOverflow.ellipsis,
          ),
        ),
      ],
    ),
  );
}

2️⃣ GridView 使用卡片

代码语言:javascript
复制
GridView.count(
  crossAxisCount: 2,
  mainAxisSpacing: 10,
  crossAxisSpacing: 10,
  childAspectRatio: 0.7,
  padding: EdgeInsets.all(10),
  children: imageList.map((item) {
    return buildGridItem(item);
  }).toList(),
)

📌 到这里,你已经写出了一个标准商品列表页


七、GridView.builder(企业级必会)

当数据很多时:

👉 必须使用 GridView.builder


示例写法

代码语言:javascript
复制
GridView.builder(
  itemCount: imageList.length,
  gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
    crossAxisCount: 2,
    mainAxisSpacing: 10,
    crossAxisSpacing: 10,
    childAspectRatio: 0.7,
  ),
  itemBuilder: (context, index) {
    return buildGridItem(imageList[index]);
  },
);

📌 记住一句话:

builder = 性能更好 + 真正项目写法


八、GridView 常见踩坑点

❌ GridView 放 Column 里不限制高度 ❌ 忘记设置 childAspectRatio 导致变形 ❌ GridView 嵌套 GridView ❌ 所有逻辑写在 build 里 ❌ 不封装网格项


九、本篇你真正掌握了什么?

你已经学会:

  • GridView.count 的使用
  • GridView.builder 的标准写法
  • 网格间距 & 宽高比控制
  • 商品卡片封装
  • 九宫格 / 商品页结构

📌 到这里:

你已经可以独立完成电商类页面布局

十、一句话总结

GridView = 多列 ListView 真正的难点在“卡片设计”

🔜 下一篇预告

《Flutter 零基础入门(三十一):Stack 与 Positioned —— 悬浮、角标与覆盖布局》

下一篇我们将学习:

  • Stack 的核心思想
  • Positioned 精准定位
  • 角标 / 悬浮按钮
  • 真实 App 的覆盖效果

🚀 UI 能力将再上一个台阶

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2026-01-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Larry的Hub 微信公众号,前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • GridView 网格布局 —— 九宫格与商品列表必学
    • 一、什么是 GridView?
    • 二、最常见的使用场景
    • 三、GridView.count(最容易上手)
      • 1️⃣ 基本结构
      • 2️⃣ 一个最简单的示例
    • 四、GridView + List 数据渲染
      • 1️⃣ 数据准备
      • 2️⃣ 使用 map 生成网格
    • 五、GridView 的常用参数(非常重要)
      • 1️⃣ 主轴 / 交叉轴间距
      • 2️⃣ 子元素宽高比(关键)
    • 六、封装商品卡片(真实项目写法)
      • 1️⃣ 商品卡片 Widget
      • 2️⃣ GridView 使用卡片
    • 七、GridView.builder(企业级必会)
      • 示例写法
    • 八、GridView 常见踩坑点
    • 九、本篇你真正掌握了什么?
    • 十、一句话总结
    • 🔜 下一篇预告
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档