flutter - Flutter:如何在一定数量的索引后在gridview下添加其他小部件
问题描述
我正在使用flutter gridview项目,我想在一定数量的索引后显示另一个小部件。
如何在gridview的每6个索引之后添加小部件
GridView.builder(shrinkWrap: true,gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(crossAxisCount: 2,childAspectRatio: MediaQuery.of(context).size.width /
(MediaQuery.of(context).size.width*0.9),),
physics: NeverScrollableScrollPhysics(),
itemCount: widget.dicovervehiclelist.length,
itemBuilder: (BuildContext context, int index) {
return vehicleview(
widget.dicovervehiclelist[index], context,widget.dicovervehiclelist.length,index);
}),
解决方案
我们可以将业务逻辑放在 itemBuilder 中。
如果 index+1 可以被 6 整除,那么我们再放一个小部件。在这种情况下,我放置了 Text("This is Separator") 小部件。
Widget renderSeparator(){
return Text("This is Separator");
}
Widget renderGrids() {
Widget grids = GridView.builder(
shrinkWrap: true,
gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
crossAxisCount: 2,
childAspectRatio: MediaQuery.of(context).size.width /
(MediaQuery.of(context).size.width * 0.9),
),
// physics: NeverScrollableScrollPhysics(),
// itemCount: widget.dicovervehiclelist.length,
itemCount: 20,
itemBuilder: (BuildContext context, int index) {
// return vehicleview(
// widget.dicovervehiclelist[index],
// context,widget.dicovervehiclelist.length,
// index);
return Container(
child: Column(
children: <Widget>[
Text("Main Content"),
if ((index+1) % 6 == 0)
renderSeparator()
],
)
);
},
);
return grids;
}
- Hitanshu更新的要求
谢谢...但它仅在==5等索引下方,我想显示在两个索引下方,例如4和5 ..其中crossAxisCount:1
如果我们要实现 Grid 和 List View 的组合,我们需要有
- 自定义滚动视图
- 银格
- 银名单
- SliverChildListDelegate
工作示例应用程序
您可以查看存储库。Github
这是完整的代码
import 'package:flutter/material.dart';
class GridViewListViewIndex extends StatelessWidget {
final int newsFeedCount = 18;
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Special after 6th'),
),
body: Container(
child: renderScrollArea(context),
),
);
}
List<Widget> businessLogic(BuildContext context) {
List<Widget> temp = [];
for (var i = 1; i < newsFeedCount+1; i++) {
if (i % 6 == 1) {
temp.add(renderGrids(context));
}
if (i % 6 == 0) {
temp.add(renderLists(context));
}
}
return temp;
}
Widget renderScrollArea(BuildContext context) {
final scrollableArea = CustomScrollView(
slivers: businessLogic(context),
// Below lines are neglected as we have more complex requirement
// slivers: <Widget>[
// renderGrids(context),
// renderLists(context),
// renderGrids(context),
// renderLists(context),
// ],
);
return scrollableArea;
}
Widget renderLists(BuildContext context) {
final lists = SliverList(
delegate: SliverChildListDelegate(
[
NewsFeed(),
],
),
);
return lists;
}
Widget renderGrids(BuildContext context) {
final grids = SliverGrid(
gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
crossAxisCount: 2,
),
delegate: SliverChildListDelegate(
[
NewsFeed(),
NewsFeed(),
NewsFeed(),
NewsFeed(),
NewsFeed(),
NewsFeed(),
],
),
);
return grids;
}
}
class NewsFeed extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Container(
decoration: BoxDecoration(
color: Colors.white30,
border: Border.all(
color: Colors.black26,
width: 1.0,
),
),
padding: EdgeInsets.all(16.0),
child: Center(
child: Text("Content"),
),
);
}
}
演示
推荐阅读
- firebase - Flutter ListView.builder 在滚动时结结巴巴并跳到顶部
- c# - 与以下 sql 等效的 linq 是什么?
- python - 计数迭代,包括异常(不希望包括异常)
- android - Kivy APK 无法在 Android 手机上运行
- powershell - CreationTime 生成错误的日期
- html - 缺少某些数据项(单元格)的表格布局的 CSS 方法?
- python - Python网站使用'soup.findall'抓取所有标签
- php - 使用 Underscore.js 执行 PHP 片段
- kdb - q 中的 Allen 的 IntersectsWith 运算符
- java - 如何创建两个点的动画选择,就像应用程序“测量 - 快速日常测量”一样