Flutter 系統(tǒng)是如何實(shí)現(xiàn)ExpansionPanelList的示例代碼
在了解ExpansionPanelList實(shí)現(xiàn)前,先來(lái)了解下MergeableMaterial,它展示多個(gè)MergeableMaterialItem組件,當(dāng)子組件發(fā)生變化時(shí),以動(dòng)畫(huà)的方式打開(kāi)或者關(guān)閉子組件,MergeableMaterial的父控件需要在主軸方向是一個(gè)沒(méi)有限制的控件,比如SingleChildScrollView、Row、Column等。
基本用法如下:
SingleChildScrollView( child: MergeableMaterial( children: [ MaterialSlice( key: ValueKey(1), child: Container( height: 45, color: Colors.primaries[1 % Colors.primaries.length], )), MaterialGap(key: ValueKey(2)), MaterialSlice( key: ValueKey(3), child: Container( height: 45, color: Colors.primaries[1 % Colors.primaries.length], )), MaterialGap(key: ValueKey(4)), MaterialSlice( key: ValueKey(5), child: Container( height: 45, color: Colors.primaries[1 % Colors.primaries.length], )), ], ), )
效果如下:

MergeableMaterial的子控件只能是MaterialSlice和MaterialGap,MaterialSlice是帶子控件的控件,顯示實(shí)際內(nèi)容,MaterialGap用于分割,只能放在MaterialSlice中間。
靜態(tài)情況下,看不出具體的效果,動(dòng)態(tài)改變子組件用法如下:
List<MergeableMaterialItem> items = [];
List.generate(_count, (index) {
items.add(MaterialSlice(
key: ValueKey(index * 2),
child: Container(
height: 45,
color: Colors.primaries[index % Colors.primaries.length],
)));
});
return SingleChildScrollView(
child: MergeableMaterial(
children: items,
),
)
效果如下:

主要看增加/刪除子組件時(shí)的動(dòng)畫(huà)效果。
增加分割線和陰影:
MergeableMaterial( hasDividers: true, elevation: 24, children: items, )
效果如下:

陰影值不能隨便設(shè)置,只能設(shè)置如下值:1, 2, 3, 4, 6, 8, 9, 12, 16, 24
此控件可以實(shí)現(xiàn)什么樣的效果呢?看下面效果:

實(shí)現(xiàn)代碼:
bool _expand = false;
@override
Widget build(BuildContext context) {
return Column(
children: <Widget>[
Container(
height: 45,
color: Colors.green.withOpacity(.3),
alignment: Alignment.centerRight,
child: IconButton(
icon: Icon(Icons.arrow_drop_down),
onPressed: () {
setState(() {
_expand = !_expand;
});
},
),
),
_expand
? MergeableMaterial(
hasDividers: true,
elevation: 24,
children: [
MaterialSlice(
key: ValueKey(1),
child: Container(
height: 200,
color: Colors.green.withOpacity(.3),
))
],
)
: Container(),
Container(
height: 45,
color: Colors.red.withOpacity(.3),
),
],
);
}
看到這個(gè)效果是否想到了ExpansionPanelList呢?系統(tǒng)控件ExpansionPanelList就是使用此控件實(shí)現(xiàn)的。
交流
Flutter博客地址(近200個(gè)控件用法):http://laomengit.com
總結(jié)
到此這篇關(guān)于Flutter 系統(tǒng)是如何實(shí)現(xiàn)ExpansionPanelList的示例代碼的文章就介紹到這了,更多相關(guān)Flutter 實(shí)現(xiàn)ExpansionPanelList內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Android實(shí)現(xiàn)關(guān)機(jī)與重啟的幾種方式(推薦)
這篇文章主要介紹了Android實(shí)現(xiàn)關(guān)機(jī)與重啟的幾種方式(推薦)的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2016-07-07
Android實(shí)現(xiàn)瘋狂連連看游戲之狀態(tài)數(shù)據(jù)模型(三)
這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)瘋狂連連看游戲之狀態(tài)數(shù)據(jù)模型,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-03-03
AndroidView與Compose框架交互實(shí)現(xiàn)介紹
Android Compose自推出正式版本后,google 就一直推薦使用Compose來(lái)開(kāi)發(fā)。正好疫情期間,作為一個(gè) Android 摸魚(yú)達(dá)人,就來(lái)摸索一下Compose的開(kāi)發(fā)。說(shuō)實(shí)話開(kāi)發(fā)了2天感覺(jué)對(duì)Android 開(kāi)發(fā)人員來(lái)說(shuō)變化是巨大的,但是作為從業(yè)者我們還必須學(xué)習(xí)和學(xué)會(huì),才能不被甩開(kāi)2022-09-09
android @override 報(bào)錯(cuò)解決方案
android @override 報(bào)錯(cuò):就是說(shuō)Java 1.5的編譯器默認(rèn)對(duì)父類的方法進(jìn)行覆蓋,采用@Override進(jìn)行說(shuō)明;但1.6已經(jīng)擴(kuò)展到對(duì)接口的方法;所以如果還是以Java 1.5的編譯器來(lái)編譯的話,會(huì)出現(xiàn)錯(cuò)誤2012-12-12
Android畫(huà)圖實(shí)現(xiàn)MPAndroidchart折線圖示例詳解
這篇文章主要為大家介紹了Android畫(huà)圖實(shí)現(xiàn)MPAndroidchart折線圖示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-07-07
android?sharedUserId?使用知識(shí)盲點(diǎn)解析
這篇文章主要為大家介紹了android?sharedUserId使用的知識(shí)盲點(diǎn)解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-02-02
Android切換前后臺(tái)點(diǎn)擊通知進(jìn)入當(dāng)前頁(yè)面
這篇文章主要介紹了Android切換前后臺(tái)點(diǎn)擊通知進(jìn)入當(dāng)前頁(yè)面,主要講述當(dāng)App退出到后臺(tái)的后,怎么點(diǎn)擊通知回到原來(lái)按下HOME鍵之前的前臺(tái)頁(yè)面,需要的朋友可以參考下2023-03-03

