Flutter 每显示六个网格项后,将网格项显示为第七个全宽网格

Flutter 每显示六个网格项后,将网格项显示为第七个全宽网格,flutter,gridview,widget,width,Flutter,Gridview,Widget,Width,我正在从api获取数据。我正在gridview中列出这些数据。在每次(索引%6==0)之后,我想在网格视图中显示带有crossAxisCount:1的第七个\u项。如果(索引%6==0)不正确,我想在网格视图中显示任何带有crossAxisCount:2的_项 第七项=adbanner网格项 当__ any_item=包含数据库数据的任何网格项 扩展( 孩子:未来建设者( 未来:xtraDataAvailable==false ?获取项目(0、10) :获取项目(跳过、限制), 生成器:(Bui

我正在从api获取数据。我正在gridview中列出这些数据。在每次
(索引%6==0)
之后,我想在网格视图中显示带有
crossAxisCount:1的第七个\u项。如果
(索引%6==0)
不正确,我想在网格视图中显示任何带有
crossAxisCount:2
的_项

第七项=adbanner网格项

当__

any_item=包含数据库数据的任何网格项

扩展(
孩子:未来建设者(
未来:xtraDataAvailable==false
?获取项目(0、10)
:获取项目(跳过、限制),
生成器:(BuildContext上下文,异步快照){
如果(snapshot.data!=null){
返回通知侦听器(
子项:GridView.builder(
gridDelegate:SliverGridDelegateWithFixedCrossAxisCount(
交叉轴计数:2,
),
项目计数:
_search.isEmpty?itemsgrid.length:_search.length,
itemBuilder:(上下文,索引){
如果(索引!=0&&index%6==0){
返回容器(
边距:仅限边缘组(底部:20.0),
//第七项,横幅有交叉轴计数:1
子项:文本(“第七项”),
),
);
}否则{
//任意_项,db中的任意项,且具有crossAxisCount:2
返回容器(子项:文本('any_item')),
}
)
)

请注意,有一种更好的方法,比如在gridview中更新
crossAxisCount
。我用setstate尝试过这种方法,但效果不理想。只想让它发挥作用。谢谢。

您可以使用StaggedGridView从

范例

class Staggered extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: SafeArea(
        child: StaggeredGridView.count(
          crossAxisCount: 2,
          mainAxisSpacing: 5,
          crossAxisSpacing: 5,
          children: List.generate(14, (index){
            return Container(
              child: Center(
                child: Text("${index+1}"),
              ),
              color: Colors.blue,
            );
          }),
          staggeredTiles: buildTiles(),
        ),
      ),
    );
  }

  List<StaggeredTile> buildTiles(){
    return List.generate(14, (index){
      if((index+1)%7 == 0){
        return StaggeredTile.count(2, 1);
      }else{
        return StaggeredTile.count(1, 1);
      }
    });
  }
}
类窗口小部件{
@凌驾
小部件构建(构建上下文){
返回脚手架(
正文:安全区(
子项:staggedGridView.count(
交叉轴计数:2,
主轴间距:5,
横轴间距:5,
子项:List.generate(14,(索引){
返回容器(
儿童:中心(
子项:文本(“${index+1}”),
),
颜色:颜色,蓝色,
);
}),
交错文件:buildTiles(),
),
),
);
}
列出buildTiles(){
返回列表。生成(14,(索引){
如果((索引+1)%7==0){
返回交错文件计数(2,1);
}否则{
返回交错文件计数(1,1);
}
});
}
}
输出: