您好,登錄后才能下訂單哦!
這篇文章將為大家詳細(xì)講解有關(guān)flutterExpansionTile層級菜單的實(shí)現(xiàn),文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關(guān)知識有一定的了解。
開發(fā)環(huán)境
win10 Android Studio
效果
用于多級菜單展示,或選擇。
如 每個省,市,縣;
如 樹木的病蟲害;
關(guān)鍵代碼
@override Widget build(BuildContext context) { return ListTile( title: _buildItem(widget.bean), ); } Widget _buildItem(NameBean bean){ if(bean.children.isEmpty){ return ListTile( title: Text(bean.name), onTap: (){ _showSeletedName(bean.name); }, ); } return ExpansionTile( key: PageStorageKey<NameBean>(bean), title: Text(bean.name), children: bean.children.map<Widget>(_buildItem).toList(), leading: CircleAvatar( backgroundColor: Colors.green, child: Text(bean.name.substring(0,1),style: TextStyle(color: Colors.white),), ), ); }
分析
api:ExpansionTile 算法:遞歸
1. ExpansionTile的使用
一般傳入三個參數(shù)
key,title,children;
title:每一行上面的文字; children:菜單下面的子條目,是一個數(shù)組; key:根據(jù)源碼傳入PageStorageKey,用于保存滑動過程中的狀態(tài);
2. 遞歸
有的條目有子條目,有的沒有,通過遞歸的方式遍歷出每條數(shù)據(jù);
通過 bean.children.isEmpty 來結(jié)束遞歸;如 “直轄市”中的北京,下面沒有 “市”了,也就是children.isEmpty,此時應(yīng)該結(jié)束遞歸,返回 ListTile;如“省級行政單位” 下面的 “黑龍江”還有很多個“市”,還不需要繼續(xù)遍歷返回 層級菜單ExpansionTile;
3. 源碼
學(xué)習(xí)flutter,很多不了解的地方都可以試著看看對應(yīng)源碼上面的注釋。
/// A single-line [ListTile] with a trailing button that expands or collapses/// the tile to reveal or hide the [children].////// This widget is typically used with [ListView] to create an/// "expand / collapse" list entry. When used with scrolling widgets like/// [ListView], a unique [PageStorageKey] must be specified to enable the/// [ExpansionTile] to save and restore its expanded state when it is scrolled/// in and out of view.////// See also:////// * [ListTile], useful for creating expansion tile [children] when the/// expansion tile represents a sublist./// * The "Expand/collapse" section of/// <https://material.io/guidelines/components/lists-controls.html>.class ExpansionTile extends StatefulWidget {
上面一段是 ExpansionTile 的源碼注釋。粗略一看會發(fā)現(xiàn)幾個熟悉的字眼:ListView,ListTile不錯,實(shí)現(xiàn)層級菜單的效果,需要搭配使用ListView與ListTile,上面貼的關(guān)鍵代碼中 _buildItem()方法恰恰符合這一點(diǎn),當(dāng)有子條目的時候返回ExpansionTile ,當(dāng)沒有子條目的時候返回 ListTile;
關(guān)于flutterExpansionTile層級菜單的實(shí)現(xiàn)就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學(xué)到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。