flutter ExpansionTile 层级菜单的实现
2019-07-24 15:52
3611 查看
开发环境
- win10
- Android Studio
效果
用于多级菜单展示,或选择。
如 每个省,市,县;
如 树木的病虫害;
关键代码
@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的使用
一般传入三个参数
key,title,children;
- title:每一行上面的文字;
- children:菜单下面的子条目,是一个数组;
- key:根据源码传入PageStorageKey,用于保存滑动过程中的状态;
2. 递归
有的条目有子条目,有的没有,通过递归的方式遍历出每条数据;
通过 bean.children.isEmpty 来结束递归;
如 “直辖市”中的北京,下面没有 “市”了,也就是children.isEmpty,此时应该结束递归,返回 ListTile;
如“省级行政单位” 下面的 “黑龙江”还有很多个“市”,还不需要继续遍历返回 层级菜单ExpansionTile;
3. 源码
学习flutter,很多不了解的地方都可以试着看看对应源码上面的注释。
/// 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 的源码注释。
粗略一看会发现几个熟悉的字眼:ListView,ListTile
不错,实现层级菜单的效果,需要搭配使用ListView与ListTile,
上面贴的关键代码中 _buildItem()方法恰恰符合这一点,
当有子条目的时候返回ExpansionTile ,当没有子条目的时候返回 ListTile;
完整代码--->gihub
以上就是本文的全部内容,希望对大家的学习有所帮助
您可能感兴趣的文章:
相关文章推荐
- 递归实现层级查询菜单
- Flutter实现底部菜单导航
- 基于jQuery实现手风琴菜单、层级菜单、置顶菜单、无缝滚动效果
- 层级菜单动态效果的实现
- java实现构造无限层级树形菜单
- vue单个组件实现无限层级多选菜单功能
- JQuery实现层级菜单
- React中通过tree组件实现不确定层级的折叠菜单效果
- 【Web Tricks 7】纯CSS实现的层级(树形)菜单
- JS实现网站菜单拖拽移位效果的方法
- vue-router+vuex addRoutes实现路由动态加载及菜单动态加载
- css3实现美化菜单设计
- Android DrawerLayout实现侧拉菜单功能
- js实现简单的下拉折叠菜单
- JS + CSS + DIV 实现动画式折叠菜单
- ios实现底部PopupWindow的示例代码(底部弹出菜单)
- CSS JavaScript 实现菜单功能 改进版
- c#实现左侧伸缩菜单那
- JavaScript之AJAX实现二级联动菜单(jsp+js+servlet+xml)
- 利用DrawerLayout实现侧滑菜单