首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在选择范围内使用List view.builder和item builder?

如何在选择范围内使用List view.builder和item builder?
EN

Stack Overflow用户
提问于 2020-06-17 00:04:12
回答 3查看 790关注 0票数 0

假设我有一个从1到10的数字列表。我如何使用列表视图构建器/项目构建器,例如,仅打印2-7或7-9而不是整个列表?

EN

回答 3

Stack Overflow用户

发布于 2020-06-17 01:43:53

您可以使用dart提供的核心库来处理列表的值生成,如下所示:

代码语言:javascript
运行
复制
  var listNumber = new List<int>.generate(10, (i) => i + 1);

然后在ListView.builder中循环你的列表,或者直接使用ListView,因为你没有一个很大的列表,

代码语言:javascript
运行
复制
ListView.builder(
                itemCount: listNumber.length,
                itemBuilder: (_, i) => Text(listNumber[i]),
              ),

通过一些改进,整个工作的应用程序将是:

代码语言:javascript
运行
复制
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

票数 1
EN

Stack Overflow用户

发布于 2020-06-17 00:15:39

列表视图一个接一个地构建其项。如果您为每个项目分配了一个键,然后在返回之前,您可以尝试在满足该键的情况下返回一个空小部件。

将您的范围放入列表中,并检查列表视图返回的项是否具有该属性

代码语言:javascript
运行
复制
List range = [];

修改列表视图,

代码语言:javascript
运行
复制
ListView.builder(itemBuilder: (context, index){
  if (range.contains('Your Key')){
     return Container();
  } else {
     return Your Normal List Item;
  }
});
票数 0
EN

Stack Overflow用户

发布于 2020-06-17 00:30:52

与其给出一个无用的容器小部件,不如使用itemBuilder和简单的数学运算。以你的例子为例,假设我们有一个数字列表:

代码语言:javascript
运行
复制
List<int> numbers = [0,1, 2, 3, 4, 5, 6, 7, 8, 9];

现在,我们可以拥有您想要显示其列表的开始和结束索引

代码语言:javascript
运行
复制
int startIndex = 2;
int endIndex = 7;

所以现在使用简单的数学运算,你就可以实现你想要的结果。只要看看下面的代码,它的工作方式就像一个护身符,而且比提供一个无用的小部件更高效:

代码语言:javascript
运行
复制
int itemCount = (endIndex - startIndex)+1;

现在在列表视图中使用它,如下所示:

代码语言:javascript
运行
复制
ListView.builder(
              itemCount: itemCount,
              itemBuilder: (context, index) {
                return (Text(numbers[startIndex + index].toString()));
              })

因此,整个工作代码将是:

代码语言:javascript
运行
复制
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构建器的工作方式。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62412794

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档