假设我有一个从1到10的数字列表。我如何使用列表视图构建器/项目构建器,例如,仅打印2-7或7-9而不是整个列表?
发布于 2020-06-17 01:43:53
您可以使用dart提供的核心库来处理列表的值生成,如下所示:
var listNumber = new List<int>.generate(10, (i) => i + 1);
然后在ListView.builder中循环你的列表,或者直接使用ListView,因为你没有一个很大的列表,
ListView.builder(
itemCount: listNumber.length,
itemBuilder: (_, i) => Text(listNumber[i]),
),
通过一些改进,整个工作的应用程序将是:
import 'package:flutter/material.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
var listNumber = new List<int>.generate(10, (i) => i + 1);
var startItem = 2;
var endItem = 7;
bool all = false;
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Printing number',
home: Scaffold(
appBar: AppBar(
title: Text('Printing number'),
),
body: Padding(
padding: EdgeInsets.symmetric(
vertical: 15.0,
horizontal: 10.0,
),
child: ListView.builder(
itemCount: all ? listNumber.length : (endItem - startItem) + 1,
itemBuilder: (_, i) => PrintRange(i,all,listNumber,startItem),
),
),
),
);
}
}
class PrintRange extends StatelessWidget {
final int i;
final bool all;
final List listNumber;
final int startItem;
PrintRange(this.i,this.all,this.listNumber,this.startItem);
@override
Widget build(BuildContext context) {
return Card(
elevation: 5.0,
child: ListTile(
title: Center(
child: Text(
all ? listNumber[i].toString() : listNumber[i + startItem].toString(),
style: TextStyle(fontSize: 20.0),
),
),
),
);
}
}
另外,您还可以使用Slider类对其进行改进:here
发布于 2020-06-17 00:15:39
列表视图一个接一个地构建其项。如果您为每个项目分配了一个键,然后在返回之前,您可以尝试在满足该键的情况下返回一个空小部件。
将您的范围放入列表中,并检查列表视图返回的项是否具有该属性
List range = [];
修改列表视图,
ListView.builder(itemBuilder: (context, index){
if (range.contains('Your Key')){
return Container();
} else {
return Your Normal List Item;
}
});
发布于 2020-06-17 00:30:52
与其给出一个无用的容器小部件,不如使用itemBuilder和简单的数学运算。以你的例子为例,假设我们有一个数字列表:
List<int> numbers = [0,1, 2, 3, 4, 5, 6, 7, 8, 9];
现在,我们可以拥有您想要显示其列表的开始和结束索引
int startIndex = 2;
int endIndex = 7;
所以现在使用简单的数学运算,你就可以实现你想要的结果。只要看看下面的代码,它的工作方式就像一个护身符,而且比提供一个无用的小部件更高效:
int itemCount = (endIndex - startIndex)+1;
现在在列表视图中使用它,如下所示:
ListView.builder(
itemCount: itemCount,
itemBuilder: (context, index) {
return (Text(numbers[startIndex + index].toString()));
})
因此,整个工作代码将是:
Widget build(BuildContext context) {
List<int> numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
int startIndex = 2;
int endIndex = 6;
int itemCount = (endIndex - startIndex) + 1;
return Scaffold(
body: Center(
child: SizedBox(
height: 300,
width: 100,
child: ListView.builder(
itemCount: itemCount,
itemBuilder: (context, index) {
return (Text(numbers[startIndex + index].toString()));
}),
),
),
);
}
因此,您可以自定义listview构建器的工作方式。
https://stackoverflow.com/questions/62412794
复制相似问题