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
相关产品推荐
相关产品推荐

