android使用flutter的ListView實現(xiàn)滾動列表的示例代碼
現(xiàn)如今打開一個 App,比如頭條、微博,都會有長列表,隨著我們不斷地滑動,視窗內(nèi)的內(nèi)容也會不斷地更新。今天就用 Flutter 實現(xiàn)一下這種效果。
這里的表現(xiàn)其實就相當(dāng)于有一個固定長度的容器,然后超出的內(nèi)容是不可見的,只有當(dāng)你向上或向下滑動屏幕時,視窗外看不見的內(nèi)容才會出現(xiàn)在視窗中。如果在 web 開發(fā)時,是需要容器加上樣式
overflow: auto;
要想用 Flutter 實現(xiàn),其實也是很簡單的,因為 Flutter 為我們提供了 ListView 組件。
ListView 主要有以下幾種使用方式
- ListView
- ListView.builder
- ListView.separated
- ListView.custom
ListView
ListView 是最簡單直接的方式,簡單,那么適用的場景也是簡單的。僅適用于內(nèi)容較少的情形,因為它是一次性渲染所有的 items ,當(dāng) items 的數(shù)目較多時,很容易出現(xiàn)卡頓現(xiàn)象的,導(dǎo)致滑動不流暢。 你可以試試加大下面 items 的大小,然后對比一下體驗效果。
class ListViewDemo extends StatelessWidget { final _items = List<Widget>.generate(10, (i) => Container(padding: EdgeInsets.all(16.0), child: Text("Item $i"))); @override Widget build(BuildContext context) { return ListView( children: _items, ); } }
ListView.builder()
構(gòu)造函數(shù) builder 要求傳入兩個參數(shù), itemCount
和 itemBuilder
。前者規(guī)定列表數(shù)目的多少,后者決定了每個列表如何渲染。跟 ListView 不同的點在于,這是懶加載的,假如有 1000 個列表,初始渲染時并不會所有都渲染,而只會特定數(shù)量的 item ,這對于性能和用戶體驗來說,是很好的提升。 你可以對比用 ListView 和用 ListView.builder 渲染 1000 個列表時,體驗是否有差別。
class ListViewDemo extends StatelessWidget { final _items = List<String>.generate(1000, (i) => "Item $i"); @override Widget build(BuildContext context) { return ListView.builder( itemCount: 1000, itemBuilder: (context, idx) { return Container( padding: EdgeInsets.all(16.0), child: Text(_items[idx]), ); }, ); } }
ListView.separated()
separated 相比較于 builder,又多了一個參數(shù) separatorBuilder
,用于控制列表各個元素的間隔如何渲染。比如,我們需要列表的每個 item 之間有一個分割線,就可以跟下面那樣,加一個 Divider 組件。
class ListViewDemo extends StatelessWidget { final _items = List<String>.generate(1000, (i) => "Item $i"); @override Widget build(BuildContext context) { return ListView.separated( itemCount: 1000, itemBuilder: (context, idx) { return Container( padding: EdgeInsets.all(16.0), child: Text(_items[idx]), ); }, separatorBuilder: (context, idx) { return Divider(); }, ); } }
ListView.custom()
custom,就跟名字一樣,讓我們自定義。必須的參數(shù)就是 childrenDelegate
, 然后傳入一個 實現(xiàn)了 SliverChildDelegate
的組件,如 SliverChildListDelegate
和 SliverChildBuilderDelegate
。
SliverChildListDelegate
接收跟 ListView 一樣的 children
,而 SliverChildBuilderDelegate
接收跟 ListView.builder 的 itemBuilder
一樣類型的函數(shù)。
正常來說,前面三個已經(jīng)可以滿足我們的日常使用需求了,無需自定義。
總結(jié),上面主要討論了 ListView 的幾個構(gòu)造函數(shù)及用法,討論如何實現(xiàn)常見的滾動列表。
完成的代碼,可見list_view.dart 。
最后
筆者最近在學(xué)習(xí)flutter,會持續(xù)地記錄自己的學(xué)習(xí)過程,并放在 github 上。
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
android使用handlerthread創(chuàng)建線程示例
這篇文章主要介紹了android使用handlerthread創(chuàng)建線程,講解了這種方式的好處及為什么不使用Thread類的原因2014-01-01Android編程實現(xiàn)獲取系統(tǒng)內(nèi)存、CPU使用率及狀態(tài)欄高度的方法示例
這篇文章主要介紹了Android編程實現(xiàn)獲取系統(tǒng)內(nèi)存、CPU使用率及狀態(tài)欄高度的方法,涉及Android基于自定義類實現(xiàn)針對系統(tǒng)硬件信息的相關(guān)獲取操作技巧,需要的朋友可以參考下2017-08-08支付寶咻一咻怎么用 Android幫你實現(xiàn)咻一咻
Android幫你實現(xiàn)咻一咻,這篇文章主要為大家介紹了支付寶咻一咻的幾種思路,感興趣的朋友可以參考一下2016-02-02Android 實現(xiàn)不同字體顏色的TextView實現(xiàn)代碼
這篇文章主要介紹了Android 實現(xiàn)不同字體顏色的TextView實現(xiàn)代碼的相關(guān)資料,需要的朋友可以參考下2017-05-05Kotlin Service服務(wù)組件開發(fā)詳解
這幾天分析了一下的啟動過程,于是乎,今天寫一下Service使用; 給我的感覺是它并不復(fù)雜,千萬不要被一坨一坨的代碼嚇住了,雖然彎彎繞繞不少,重載函數(shù)一個接著一個,就向走迷宮一樣,但只要抓住主線閱讀,很快就能找到出口2022-12-12Android學(xué)習(xí)教程之動態(tài)GridView控件使用(6)
這篇文章主要為大家詳細介紹了Android動態(tài)GridView控件的使用方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下2016-11-11Android Studio中Run按鈕是灰色的快速解決方法
這篇文章主要介紹了Android Studio中Run按鈕是灰色的快速解決方法,非常不錯,具有參考借鑒價值,需要的朋友可以參考下2018-03-03