注意:無特殊說明,Flutter版本及Dart版本如下:
- Flutter版本: 1.12.13+hotfix.5
- Dart版本: 2.7.0
基礎用法
在展示大量資料的時候我們第一會想到使用ListView,如果你覺得ListView比較單一、枯燥,你可以使用ListWheelScrollView,ListWheelScrollView和ListView同源,但它的渲染效果類似於車輪(或者滾筒),它不是在平面上滑動,而是轉動車輪,先來看一波效果:
ListWheelScrollView的用法和ListView基本相同,基礎用法:
ListWheelScrollView(
itemExtent: 150,
children: <Widget>[
...
],
);
複製程式碼
children
是子控制元件,itemExtent
指定每一個Item的高度。
當有大量資料的時候這種方式明顯是不科學的,就像ListView.builder
一樣,用法如下:
ListWheelScrollView.useDelegate(
itemExtent: 150,
childDelegate: ListWheelChildBuilderDelegate(
builder: (context, index) {
return Container(
margin: EdgeInsets.symmetric(vertical: 10, horizontal: 30),
color: Colors.primaries[index % 10],
alignment: Alignment.center,
child: Text('$index'),
);
},
childCount: 100),
);
複製程式碼
調整直徑
ListWheelScrollView的渲染效果類似車輪,設定diameterRatio
調整其直徑屬性:
ListWheelScrollView(
itemExtent: 150,
diameterRatio: 1,
children: <Widget>[
...
],
)
複製程式碼
diameterRatio
是圓筒直徑和主軸渲染視窗的尺寸的比,預設值是2
,如果是垂直方向,主軸渲染視窗的尺寸是ListWheelScrollView的高。diameterRatio越小表示圓筒越圓。
調整perspective
perspective
屬性表示圓柱投影透檢視,類似OpenGLES中透視投影,理解為看圓柱的距離,為0
時表示從無限遠處看,1
表示從無限近處看,值的範圍(0,0.01],注意是左開右閉區間,預設值是0.003
,值越大,渲染效果越圓,用法如下:
ListWheelScrollView(
itemExtent: 150,
perspective: 0.003,
children: <Widget>[
...
],
);
複製程式碼
offAxisFraction
offAxisFraction
屬性表示車輪水平偏離中心的程度,用法如下:
ListWheelScrollView(
itemExtent: 150,
offAxisFraction: 13,
children: <Widget>[
],
);
複製程式碼
offAxisFraction
的值從0到2的效果:
放大鏡
通過useMagnifier
和magnification
屬性實現放大鏡效果,useMagnifier
是否啟用放大鏡,magnification
屬性是放大倍率,用法如下:
ListWheelScrollView(
itemExtent: 150,
useMagnifier: true,
magnification: 1.5,
children: <Widget>[
],
);
複製程式碼
效果如下:
squeeze
squeeze
屬性表示車輪上的子控制元件數量與在同等大小的平面列表上的子控制元件數量之比,例如,如果高度為100px,[itemExtent]為20px,那麼5個項將放在一個等效的平面列表中。當squeeze
為1時,RenderListWheelViewport中也會顯示5個子控制元件。當squeeze
為2時,RenderListWheelViewport中將顯示10個子控制元件,預設值為1,用法如下:
ListWheelScrollView(
itemExtent: 150,
squeeze: 1,
children: <Widget>[
],
);
複製程式碼
更多相關閱讀:
- Flutter系列文章總覽
- Flutter Widgets 之 Expanded和Flexible
- Flutter Widgets 之 AnimatedList
- Flutter Widgets 之 SliverAppBar