組件名稱 用途/適合場景 是否懶加載 支持列表結構 用法復雜度 SingleChildScrollView 適用于內容數量不大、不重復的頁面(如表單、靜態內容) ? 否 ? 否 ?? ListView 適用于垂直方向的長列表,自動滾動;適合展示大量數據 ? 支持 ? 是 ?? ListView.builder 優化版 ListView,適合超長動態列表,按需懶加載構建 ? 強烈推薦 ? 是 ??? GridView 適用于網格狀布局,如圖片列表 ? 支持 ? 是(網格) ??? CustomScrollView 高級滾動視圖,組合多個滾動子元素(如 SliverAppBar + SliverList) ? 支持 ? 是(靈活 ???? PageView 水平翻頁,用于頁面輪播、引導頁、Tab 內容切換等 ? 每頁懶加載 ? 否 ?? Scrollable(低階) 最底層滾動組件,通常不建議直接使用,除非自定義滾動行為 ? 取決于實現 ? ?????
常見使用場景說明
SingleChildScrollView 適合非列表型的頁面,比如表單、圖文頁面。
SingleChildScrollView(child: Column(children: [...],),
)
不支持懶加載 所有子項一次性渲染 不建議用于長列表,性能差
ListView / ListView.builder 適合列表型頁面(如聊天記錄、新聞列表、商品列表等)
ListView(children: [Text('Item 1'),Text('Item 2'),],
)// 更推薦
ListView.builder(itemCount: 1000,itemBuilder: (context, index) => Text('Item $index'),
)
支持滾動 支持懶加載(builder 模式) 更適合長內容
GridView 用于網格狀內容(如相冊、九宮格)
GridView.count(crossAxisCount: 2,children: [...],
)
CustomScrollView + Slivers 用于構建更復雜滾動效果,比如頂部可折疊 AppBar + 列表內容
CustomScrollView(slivers: [SliverAppBar(expandedHeight: 200,flexibleSpace: FlexibleSpaceBar(title: Text('標題')),pinned: true,),SliverList(delegate: SliverChildBuilderDelegate((context, index) => ListTile(title: Text('Item $index')),childCount: 50,),),],
)
高度可定制,滾動聯動效果 用于復雜的 UI 頁面(如首頁、動態頁)
PageView
PageView(children: [Container(color: Colors.red),Container(color: Colors.green),],
)
適用于引導頁、卡片輪播、Tab 頁 支持左右/上下滑動 支持手勢控制、自動翻頁
總結建議
頁面類型 推薦滾動組件 表單、靜態信息頁面 SingleChildScrollView 聊天、列表、動態加載頁面 ListView.builder 圖片網格、宮格商品 GridView 首頁、復雜滑動結構頁面 CustomScrollView 引導頁、卡片輪播 PageView