You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Flutter中使用GridView.builder构建分类网格?

使用Flutter的GridView.builder实现分类卡片网格布局

需求说明

已有单个分类卡片的布局代码,同时拥有包含24个分类名称的列表name,对应本地图片命名为cat1.png至cat24.png,需要将这些卡片以网格形式展示。

实现步骤与完整代码

1. 准备数据

确保分类名称列表正确定义:

List<String> name = ["Neurology", "Dentist", "Eye", "Ear", ...]; // 补充完整24个分类名称

2. 用GridView.builder构建网格

将原有单卡片组件整合到网格布局中,动态绑定每个分类的名称和图片:

GridView.builder(
  padding: const EdgeInsets.all(10),
  gridDelegate: const SliverGridDelegateWithFixedCrossAxisCount(
    crossAxisCount: 3, // 每行显示3个卡片
    crossAxisSpacing: 10, // 卡片水平间距
    mainAxisSpacing: 10, // 卡片垂直间距
    childAspectRatio: 0.8, // 调整卡片宽高比适配布局
  ),
  itemCount: name.length, // 总卡片数量
  itemBuilder: (context, index) {
    return InkWell(
      onTap: () {
        // 此处添加卡片点击后的逻辑,比如跳转对应分类页面
      },
      child: Container(
        decoration: BoxDecoration(
          borderRadius: BorderRadius.circular(20),
          color: MyTheme.creamColor,
        ),
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            Container(
              margin: const EdgeInsets.only(top: 15),
              // 动态拼接图片路径,索引从0开始,图片编号取index+1
              child: Image.asset("assets/images/cat${index+1}.png"),
            ),
            Padding(
              padding: const EdgeInsets.all(8.0),
              child: Text(name[index]),
            )
          ],
        ),
      ),
    );
  },
)

关键说明

  • gridDelegate:通过SliverGridDelegateWithFixedCrossAxisCount控制网格列数、间距和卡片比例,保证布局整齐统一。
  • itemBuilder:根据列表索引动态生成每个卡片,图片路径通过index+1拼接(适配图片命名从cat1开始的规则),分类名称直接取对应索引的列表值。
  • 保留了原卡片的点击交互、圆角背景等样式,确保视觉风格一致。

内容的提问来源于stack exchange,提问作者Md Reyaz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 01:07:07