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

Flutter中构建不规则网格布局应使用何种Widget?

实现不规则图片网格布局

要实现你需要的不规则网格布局,可以调整flutter_staggered_grid_view中SliverQuiltedGridDelegate的pattern和repeatPattern参数,匹配原型的布局逻辑。

你的测试代码中pattern设置不符合原型结构,以下是调整后的代码:

GridView.custom(
  gridDelegate: SliverQuiltedGridDelegate(
    crossAxisCount: 3, // 改为3列适配布局
    mainAxisSpacing: 4,
    crossAxisSpacing: 4,
    repeatPattern: QuiltedGridRepeatPattern.same, // 使用相同重复模式
    pattern: [
      QuiltedGridTile(2, 2), // 左侧大卡片:占2行2列
      QuiltedGridTile(1, 1), // 右上小卡片:占1行1列
      QuiltedGridTile(1, 1), // 右中小卡片:占1行1列
      QuiltedGridTile(1, 1), // 左下小卡片:占1行1列
      QuiltedGridTile(1, 1), // 左中小卡片:占1行1列
      QuiltedGridTile(2, 2), // 右侧大卡片:占2行2列
    ],
  ),
  childrenDelegate: SliverChildBuilderDelegate(
    (context, index) => Tile(index: index),
  ),
);

如果上述方式仍不满足需求,也可以直接使用StaggeredGridView.countBuilder来更灵活定义每个item的尺寸:

StaggeredGridView.countBuilder(
  crossAxisCount: 3,
  itemCount: 20,
  itemBuilder: (context, index) => Tile(index: index),
  staggeredTileBuilder: (index) {
    // 按索引循环匹配布局模式
    switch(index % 6) {
      case 0: return StaggeredTile.count(2, 2);
      case 1:
      case 2:
      case 3:
      case 4: return StaggeredTile.count(1, 1);
      case 5: return StaggeredTile.count(2, 2);
      default: return StaggeredTile.count(1, 1);
    }
  },
  mainAxisSpacing: 4,
  crossAxisSpacing: 4,
)

不规则网格布局原型图

内容的提问来源于stack exchange,提问作者Cláudio Silva

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 23:18:22