Flutter 中的 ListView 和 SingleChildScrollView 有什么区别?

Bei*_*man 14 dart material-design flutter flutter-layout

我见过几个ListView用作主要body元素的示例,Scaffold并且在一些教程中,它是SingleChildScrollView. 我所理解的只是允许根据配置的方向进行一些滚动轴,但无法弄清楚何时使用一个而不是另一个?

列表显示:

Scaffold
  body : ListView
    children : Padding/Container
Run Code Online (Sandbox Code Playgroud)

单子滚动视图:

Scaffold
  body : SingleChildScrollView
    child : Column
Run Code Online (Sandbox Code Playgroud)

Rém*_*let 41

您可以将ListView视为对SingleChildScrollView + Column组合的优化。

通过使用ListView,只安装和绘制可见的项目。

另一方面,通过使用SingleChildScrollView + Column,整个项目列表被挂载+绘制,即使只有少数项目可见。

权衡是ListView不太灵活。所以对于具有少量项目的复杂布局,性能提升可能不值得麻烦,在这种情况下我们可以使用SingleChildScrollView

  • @RémiRousselet 嗨,Rémi,你说“代价是 ListView 不太灵活。” - 你能解释一下这到底是什么意思吗? (6认同)
  • 好奇心。这些问题我都曾问过自己,并自主地寻找过答案。 (5认同)
  • @Badamchi 没有 `ListView` 也进行延迟渲染。唯一的区别是“children”参数的内存分配。 (5认同)
  • 感谢@Remi 的回答,很有帮助。只是想知道您是如何获得这么多关于 Flutter 的知识的?您推荐的任何学习资源。 (4认同)
  • “Listview”本身并不高效,或者您所说的优化,因为它还渲染和绘制列表中的所有项目。`Listview.builder()` 是一种使用延迟加载并有效利用资源的方法。 (4认同)
  • @Badamchi 是的,但这与渲染无关。“创建一个项目(又名小部件)”并不意味着它将被渲染。 (2认同)

jit*_*555 11

ListView:当我们必须为 n 个元素呈现相同类型的小部件时使用

SingleChildScrollView:当我们有 n 个元素的不同小部件时使用。

理想情况下,我们需要滚动的两种情况,Listview 都有默认行为,但列和其他小部件没有那么需要使用SingleChildScrollView

更新: 选择 ListView 时应注意的重要一点

 ListView() -- Render all the items in the list, even if it is not visible. 

`ListView.Builder()` -- Render only visible items on the screen. 
Run Code Online (Sandbox Code Playgroud)