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

问题描述 投票:2回答:3

我看过几个例子,使用 ListView 作为主 body 的元素 Scaffold 而在少数教程中,它是 SingleChildScrollView. 我所理解的是,两者都允许一些轴的滚动的基础上,配置的方向,但不能弄清楚什么时候使用一个比其他?

ListView:SingleChildScrollView

Scaffold
  body : ListView
    children : Padding/Container

SingleChildScrollView :

Scaffold
  body : SingleChildScrollView
    child : Column
flutter dart material-design flutter-layout
3个回答
4
投票

你可以考虑 列表视图 作为优化组合的 单个孩子滚动视图 + 专栏.

通过使用 列表视图,只有可见的项目才会被安装和喷涂。

另一方面,通过使用 单个孩子滚动视图+专栏,整个物品列表都会被挂载+喷漆,即使只有几个物品可见。

这样做的代价是 列表视图 是不太灵活的。因此,对于项目数量较少的复杂布局,性能的提升可能不值得,在这种情况下,我们可以使用 单个孩子滚动视图.


2
投票

列表视图如果你有一个要渲染的UI小部件列表,而且这些小部件的数量是动态的,你就会使用这个方法。

比如说,你需要在屏幕上只显示联系人列表,而且列表项或多或少都是类似的(UI)。你只需要在你的屏幕上显示一个联系人列表,而且列表中的项目或多或少是相似的(从用户界面和类别上看)。那么您可以使用列表视图。

A 单个孩子滚动视图 堪比 "ScrollView" 在Android中。假设你有很多UI小部件(Buttons、InputFields、Cards等),并且它们开始离开屏幕。在这种情况下,你的widgets会溢出,你会开始看到警告。为了解决这个问题,你可以用一个SingleChildScrollView来包装你的UI部件。

对于你的案例。"推荐 "部分,ListView会是一个不错的选择。


2
投票

ListView: 当我们需要为n个元素渲染同一种小部件时,就会用到ListView。

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

理想情况下,两种情况下我们都需要滚动,Listview有默认的行为,但column和其他widgets没有,所以需要使用SingleChildScrollView。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. 
© www.soinside.com 2019 - 2024. All rights reserved.