【发布时间】:2020-08-14 21:36:25
【问题描述】:
我在结构下面有一个列表;
class Data {
String name;
int id;
bool active;
}
List<Data> _dataList;
我在 Listview.builder 中使用这个列表,如下所示;
ListView.builder(
shrinkWrap: true,
scrollDirection: Axis.vertical,
itemCount: _dataList.length,
itemBuilder: (context, index) {
String name= _dataList[index].name;
String id = _dataList[index].id.toString();
bool active= _dataList[index].active;
return
active ?
Card(
elevation: 5,
child: Text(name + id));
}
)
我还可以根据此获取过滤后显示的总数和总页码;
var activeList = _dataList.where((c) => c.active == true).toList();
var activeCount = activeList.length;
var totalPages = (activecount/20).ceil();
我想添加一个分页(每页 20 个项目)以使用底部栏图标的“”类型导航,具有上一页和下一页逻辑,如何实现?
我尝试了以下逻辑,但没有成功..
建造者方面:
int page = 1;
int pageCount =0;
ListView.builder(
shrinkWrap: true,
scrollDirection: Axis.vertical,
itemCount: addedCount < 20 ? addedCount : 20,
itemBuilder: (context, index) {
String name= activeList[page == 1 ? index : index + pageCount].name;
String id = activeList[page == 1 ? index : index + pageCount].id.toString();
bool active= activeList[page == 1 ? index : index + pageCount].active;
图标侧:
Row(
mainAxisAlignment: MainAxisAlignment.end,
crossAxisAlignment: CrossAxisAlignment.center ,
children: <Widget>[
InkWell(
onTap: (){
if (1 < page){page = page - 1; pageCount = pageCount - 20;}
else {page = 1;}
setState(() {});},
child: Icon(Icons.arrow_back_ios, size: 35,)),
Text("$page / $totalPages"),
InkWell(
onTap: (){
if (page < totalPages){page = page + 1; pageCount= pageCount+ 20;}
else {page = totalPages;}
setState(() {});},
child: Icon(Icons.arrow_forward_ios, size: 35,)),
],
),
【问题讨论】:
标签: list listview flutter pagination