Flutter 每显示六个网格项后,将网格项显示为第七个全宽网格
我正在从api获取数据。我正在gridview中列出这些数据。在每次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
(索引%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);
}
});
}
}
输出: