【问题标题】:what are the differences between ListView.builder and use map functionListView.builder 和使用地图功能有什么区别
【发布时间】:2021-09-27 09:41:46
【问题描述】:

ListView.builder 和 map 函数在创建小部件列表时有什么区别?我们什么时候应该使用一个而不是另一个?。

【问题讨论】:

    标签: flutter flutter-listview


    【解决方案1】:

    如果您的项目列表很长,请使用ListView.builder()。它只构建在屏幕上可见的项目。每次用户滚动列表时,它都会构建下一个可见项。

    如果你使用

    Column(
        children: items.map((items){
            return ...
        }).toList()
    )
    

    它的构建成本很高。

    所以,我认为最好的做法是使用 ListView.builder() 。 你可以使用map 如果您确定项目不超过几项。

    【讨论】:

      【解决方案2】:

      它们是具有不同目的的方法。您可以使用列表的 map 方法将其转换为不同的可迭代对象。另一方面,ListView.builder 是一个带有 itemBuilder 方法的小部件。我假设您问的是 ListView() 和 ListView.builder() 构造函数之间的区别。

      ListView() 构造函数接受子参数,您可以在其中使用列表的 map 方法创建小部件列表。调用 build 方法时会立即呈现这些小部件。

      ListView.builder() 另一方面,接受 itemBuilder 和 itemCount 参数。不同之处在于它不会立即渲染对象,而是仅当它们需要在屏幕上可见时才渲染。因此,如果您有一个大列表,则仅会渲染由于滚动而应该可见的唯一项目,而其他项目则不会。向下滚动时,将呈现新项目,而不再呈现以前的项目。如果您有 1000 个项目但只有 10 个适合页面,则呈现这 10 个。所以这种方式可以有效地使用内存。

      只要您有需要转换为小部件列表的数据列表,请使用 ListView.builder()。仅当您手动创建小部件或使用小列表时才使用 ListView()。

      两者的示例:

       final list = ['this', 'is', 'my', 'list'];
      
        @override
        Widget build(BuildContext context) {
          return Scaffold(
            body: ListView.builder(
              itemCount: list.length,
              itemBuilder: (context, index) => Text(list[index]),
            ),
          );
        }
      
      
        @override
        Widget build(BuildContext context) {
          return Scaffold(
            body: ListView(
              children: const [
                Text('Some Text'),
                Text('Some different text'),
                Text('Another'),
                Text('Some Text'),
              ],
            ),
          );
        }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-02-17
        • 1970-01-01
        • 2011-02-22
        • 1970-01-01
        • 2019-08-23
        相关资源
        最近更新 更多