Dart 如何以组方式创建ListView?
在API中返回20条这样的记录 [ { ... “p”:1.0 ... }, { ... “p”:1.1 ... }, { ... “p”:2.0 ... }, { “p”:2.1 }, { “p”:3.0 }, { “p”:3.1 }, ] 1.0到1.1平均行数第一,2.0到2.1平均行数第二 我创建了Listview,并使用了其他逻辑,但我不知道如何在图片下方进行分组Dart 如何以组方式创建ListView?,dart,flutter,Dart,Flutter,在API中返回20条这样的记录 [ { ... “p”:1.0 ... }, { ... “p”:1.1 ... }, { ... “p”:2.0 ... }, { “p”:2.1 }, { “p”:3.0 }, { “p”:3.1 }, ] 1.0到1.1平均行数第一,2.0到2.1平均行数第二 我创建了Listview,并使用了其他逻辑,但我不知道如何在图片下方进行分组 Widget createListView(BuildContext context, AsyncSnapshot sna
Widget createListView(BuildContext context, AsyncSnapshot snapshot) {
List<Data> values = snapshot.data;
return ListView.builder(
padding: new EdgeInsets.only(top: 8.0, right: 0.0, left: 0.0),
itemCount: getItemCounter(values),
itemBuilder: (BuildContext context, int index) {
return GridView.count(
physics: ScrollPhysics(),
shrinkWrap: true,
crossAxisCount: 4,
children: List.generate(2, (index) {
return GridTile(
child: GestureDetector(
onTap: () => Navigator.push(
context,
MaterialPageRoute(
builder: (context) =>
assets2(values[index].i, widget._url))),
child: Column(
children: [
Card(
child: Container(
decoration: BoxDecoration(
border: Border.all(
color: Colors.blueAccent, width: 1.5)),
child: Stack(
children: <Widget>[
SvgPicture.asset(
'assets/images/icon1.svg',
height: 50.0,
),
],
),
),
),
Expanded(
child: Text(values[index].d, textAlign: TextAlign.center, style: TextStyle(fontSize: 10.0),),
),
],
),
),
);
}),
);
},
);
// itemCount: 10,
}
getItemCounter(List<Data> values){
List iPoint = [];
List distictI = [];
for(int i = 0; i < values.length; i++){
iPoint.add(values[i].p.toInt());
}
//remove duplicate
distictI = iPoint.toSet().toList();
return distictI.length;
}
小部件createListView(构建上下文上下文,异步快照快照){
列表值=snapshot.data;
返回ListView.builder(
填充:仅限新边集(顶部:8.0,右侧:0.0,左侧:0.0),
itemCount:getItemCounter(值),
itemBuilder:(构建上下文,int索引){
返回GridView.count(
物理:物理(),
收缩膜:对,
交叉轴计数:4,
子项:列表。生成(2,(索引){
返回网格(
儿童:手势检测器(
onTap:()=>Navigator.push(
上下文
材料路线(
生成器:(上下文)=>
assets2(值[index].i,widget.\u url)),
子:列(
儿童:[
卡片(
子:容器(
装饰:盒子装饰(
边界:边界(
颜色:Colors.blueAccent,宽度:1.5),
子:堆栈(
儿童:[
SvgPicture.asset(
“assets/images/icon1.svg”,
身高:50.0,
),
],
),
),
),
扩大(
子项:文本(值[index].d,textAlign:textAlign.center,样式:TextStyle(fontSize:10.0)),
),
],
),
),
);
}),
);
},
);
//物品计数:10,
}
getItemCounter(列表值){
列表i点=[];
列表区i=[];
对于(int i=0;i我在我的项目中做了类似的事情 将
CustomScrollView
与SliverList
一起使用,将GridView
与primary:false一起使用
以下是特定于您的示例的代码:
M类扩展了无状态小部件{
@凌驾
小部件构建(构建上下文){
最终数据=[
{“p”:1.0},
{“p”:1.1},
{“p”:2.0},
{“p”:2.1},
{“p”:3.0},
{“p”:3.1},
];
最终列表计数=
data.map((m)=>m[“p”]).reduce((a,b)=>max(a,b)).floor();
返回自定义滚动视图(
条子:[
银表(
代表:SliverChildBuilderDelegate(
(上下文,一){
最终项目=数据
其中((m)=>i+1A[“p”]。与(b[“p”])相比;
返回GridView.builder(
itemCount:items.length,
收缩膜:对,
主要:错误,
gridDelegate:SliverGridDelegateWithMaxCrossAxisExtent(
maxCrossAxisExtent:70.0,
childAspectRatio:0.9,
),
itemBuilder:(上下文,i){
最终项目=项目[i];
//TODO实现此方法以生成单个项
返回(项目);;
},
);
},
childCount:listCount,
),
),
],
);
}
}
编辑:添加了特定于问题的代码示例。
代码美化。我在项目中做了类似的事情
将CustomScrollView
与SliverList
一起使用,将GridView
与primary:false一起使用
以下是特定于您的示例的代码:
M类扩展了无状态小部件{
@凌驾
小部件构建(构建上下文){
最终数据=[
{“p”:1.0},
{“p”:1.1},
{“p”:2.0},
{“p”:2.1},
{“p”:3.0},
{“p”:3.1},
];
最终列表计数=
data.map((m)=>m[“p”]).reduce((a,b)=>max(a,b)).floor();
返回自定义滚动视图(
条子:[
银表(
代表:SliverChildBuilderDelegate(
(上下文,一){
最终项目=数据
其中((m)=>i+1A[“p”]。与(b[“p”])相比;
返回GridView.builder(
itemCount:items.length,
收缩膜:对,
主要:错误,
gridDelegate:SliverGridDelegateWithMaxCrossAxisExtent(
maxCrossAxisExtent:70.0,
childAspectRatio:0.9,
),
itemBuilder:(上下文,i){
最终项目=项目[i];
//TODO实现此方法以生成单个项
返回(项目);;
},
);
},
childCount:listCount,
),
),
],
);
}
}
编辑:添加了特定于问题的代码示例。
代码被美化。什么需要构建项目?这将构建你的网格项目(图像资产项目)GridTile
part代码中也有小错误,我只是纠正了它。where()part可以修复这个bug吗?什么需要构建项目?它将构建你的网格项目(图像资产项目)GridTile
part还有一个小bug在