在Flutter中使用ListView.builder()实现不同项目的方法

14

考虑下面这个build()函数:

Widget build(BuildContext context){
    return MaterialApp(
      home: Scaffold(
        body: Center(
          child: ListView.builder(
            itemCount: 6,
              itemBuilder: (context, i){
                if(numberTruthList[i]){
                  return ListTile(
                    title: Text("$i"),
                  );
                }
              },
          ),
        )
      ),
    );
  }
如果numberTruthList是这样的:List<bool> numberTruthList = [true, true, true, true , true, true];,那么输出结果将会是:enter image description here而如果numberTruthList是这样的:List<bool> numberTruthList = [false, true, true, true , true, true];,输出结果将会是:enter image description here我希望输出结果为一个ListView,其中包含以下项目:
 ListTile( title: Text("$i"),);

对于使得numberTruthList[i]为true的i的取值,应该编写什么代码?


https://docs.flutter.dev/cookbook/lists/mixed-list - giorgio79
4个回答

32
ListView.builder(
  itemCount: 6,
  itemBuilder: (context, i) {
    return numberTruthList[i]
      ? ListTile(
          title: Text(numberTruthList[i].toString()),
        )
      : Container(
          height: 0,
          width: 0,
        );
   },
)

空的ListTiles之间有很大的空隙。我该如何去掉这个空隙? - Naveen
1
这个巨大的空白间隙是由 ListTile() 造成的。请将其替换为高度和宽度均为0的 Container - westdabestdb

1

在else情况下使用Wrap()

Container在有内容时包装内容,当没有内容时与父级匹配。

Wrap无论如何都会包装内容。


0

itemBuilder 应该始终返回一个非空的 Widget。您可以 在这里 进行检查。


0
在主体中,我们使用ListView.builder和itemCount为20的itemBuilder。itemBuilder会根据需要创建新的小部件,最多重复20次,因为我们的itemCount=20。如果我们在ListView.builder中不使用itemCount,那么我们将得到无限的列表项,因此建议使用itemCount来避免这种错误。
import 'package:flutter/material.dart';

const int itemCount = 20;

class HomePage extends StatelessWidget {
  const HomePage({super.key});

  @override
  Widget build(BuildContext context) {
    return ListView.builder(
      itemCount: itemCount,
      itemBuilder: (BuildContext context, int index) {
        return ListTile(
          title: Text('Contact ${(index + 1)}'),
          leading: const Icon(Icons.person_outline_rounded),
          trailing: const Icon(Icons.select_all_rounded),
          onTap: () {
            debugPrint('Contact ${(index + 1)}');
          },
        );
      }
    );
  }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接