Flutter

[Flutter] SliverList 와 ListView 의 차이점

jungha_k 2023. 6. 27. 09:49

https://stackoverflow.com/questions/50367640/differences-between-sliverlist-vs-listview-in-flutter

(해당 글 2018 질문, 2020 답변)

 

Differences between SliverList vs ListView in Flutter

What are the differences between SliverList and ListView in Flutter?

stackoverflow.com

https://medium.com/flutter/slivers-demystified-6ff68ab0296f

 

Slivers, Demystified

Or, how to do fancy scrolling techniques in your mobile app with Flutter

medium.com


📝 해당 링크 일부 번역 : 

ListView는 간단하게 하나의 SliverList를 가진 CustomScrollView 라고 할 수 있습니다.
그들은 정확히 같은 역할을 합니다. 
그 둘의 유일한 차이점은 SliverList는 sliver지, 위젯이 아니라는 점입니다.

그 말은 즉 SliverList ScrollView 내부, 특히 CustomScrollView에서 사용된다는 뜻입니다.
ListView는 SilverList를 위젯으로 변환하여, Row/Container와 같은 다른 위젯과 함께 사용할 수 있도록 하는 것에 불과합니다.

대부분의 경우에는, ListView를 사용합니다.
그러나 당신이 appbar animation 스크롤같은 심화된 스크롤을 원한다면, 
당신은 ListView 대신 SliverList를 사용하도록 강제하는 CustomScrollView 를 사용해야 할 것입니다. 

ListView와 GridView와 같은 모든 스크롤 가능한 view들은, 사실 Slivers 를 사용하여 실행된 것입니다. 
당신은 Slivers를 스크롤 가능한 영역 구현에 대한 세부적인 제어를 제공하는 하위 수준의 인터페이스로 생각해도 됩니다. 왜냐하면 Sliver는 View로 스크롤할 때, 각 항목을 게으르게 build 할 수 있기 때문에, 많은 children를 효율적으로 스크롤하는 데 특히 유용하기 때문입니다.

 


📖 모두가 할 수 있는 플러터 UI 실전 p179

여러 종류의 리스트 뷰가 하나의 화면에 동시에 존재할 때, Sliver 위젯을 사용하는 것이 좋습니다.

예를 들어 ListView, GridView 같은 위젯은 데이터의 크기에 따라 높이가 동적으로 결정됩니다.
동적으로 높이가 결정되는 위젯은 미리 높이를 지정하는 것이 어렵고 까다로울 수 있습니다.
이때 Sliver 위젯을 사용하게 되면 동적으로 들어오는 데이터에 따라 높이를 자동으로 결정해줍니다.

 


 

☝🏻 한 줄 요약 

사실상 거의 같다!

(옛날 링크지만 그래도 큰 맥락은 달라지지 않은 듯)

 

ListView ≒ SliverList
GridView ≒ SliverGrid

 

* 그러나,

1) 여러 종류의 리스트 뷰가 하나의 화면에 동시에 존재할 때

2) 세세한 스크롤 커스텀 옵션을 원할때

 

Sliver를 사용한다.