Flutter(34):Material组件之ExpansionPanelList、ExpansionPanel、ExpansionPanelRadio、ExpansionTile

Flutter教学目录持续更新中

Github源代码持续更新中

1.Expansion介绍

  • ExpansionPanelList/ExpansionPanel:实现扩展列表
  • ExpansionPanelList.radio/ExpansionPanelRadio:实现单扩展列表,只会存在一个展开的条目
  • ExpansionTile:扩展面板
注意事项:

2.ExpansionPanelList属性

  • children = const <ExpansionPanel>[]:
  • expansionCallback:展开收起的回调
  • animationDuration = kThemeAnimationDuration:动画时长
  • expandedHeaderPadding = _kPanelHeaderExpandedDefaultPadding:展开时头部内边距
  • dividerColor:分割线颜色

3.ExpansionPanel

  • headerBuilder:头部widget
  • body:子widget
  • isExpanded = false:是否展开
  • canTapOnHeader = false:头部是否可点击
1601804193(1).png
class _ExpansionPanelListPageState extends State<ExpansionPanelListPage> {
  List<ExpandedBean> _dataList = [];
  List<ExpansionPanel> _widgetList = [];

  _myExpansionPanel(ExpandedBean bean) {
    return ExpansionPanel(
      headerBuilder: (context, isExpanded) {
        return Text('ExpansionPanel header');
      },
      body: ListView(
        shrinkWrap: true,
        children: [
          Text('ExpansionPanel body'),
          Text('ExpansionPanel body'),
          Text('ExpansionPanel body'),
        ],
      ),
      isExpanded: bean.isExpanded,
      canTapOnHeader: true,
    );
  }

  _myExpansionPanelList() {
    return ExpansionPanelList(
      children: _getWidgetList(),
      expansionCallback: (int panelIndex, bool isExpanded) {
        print('panelIndex = $panelIndex isExpanded = $isExpanded');
        setState(() {
          _dataList[panelIndex].isExpanded = !isExpanded;
        });
      },
      animationDuration: Duration(milliseconds: 200),
      expandedHeaderPadding: EdgeInsets.all(10),
      dividerColor: Colors.red,
    );
  }

  _getWidgetList() {
    _widgetList.clear();
    _dataList.forEach((element) {
      _widgetList.add(_myExpansionPanel(element));
    });
    return _widgetList;
  }

  @override
  void initState() {
    super.initState();
    _initData();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('ExpansionPanelList/ExpansionPanel/ExpansionPanelRadio'),
      ),
      body: SingleChildScrollView(
        child: _myExpansionPanelList(),
      ),
    );
  }
}

4.ExpansionPanelList.radio属性

this.children = const <ExpansionPanelRadio>[]:
this.expansionCallback:展开收起的回调
this.animationDuration = kThemeAnimationDuration:动画时长
this.initialOpenPanelValue:初始默认展开的子widget
this.expandedHeaderPadding = _kPanelHeaderExpandedDefaultPadding:展开时头部内边距

5.ExpansionPanelRadio属性

  • value:
  • headerBuilder:ExpansionPanelHeaderBuilder 头部widget
  • body:子widget
  • canTapOnHeader = false:头部是否可点击
1601804170(1).png
  _initWidgetList2() {
    _dataList.forEach((element) {
      _widgetList2.add(_myExpansionPanelRadio(element));
    });
  }

  _myExpansionPanelListRadio() {
    return ExpansionPanelList.radio(
      children: _widgetList2,
      initialOpenPanelValue: _widgetList2[1],
      expansionCallback: (int panelIndex, bool isExpanded) {
        print('panelIndex = $panelIndex isExpanded = $isExpanded');
      },
      animationDuration: Duration(milliseconds: 200),
      expandedHeaderPadding: EdgeInsets.all(10),
      dividerColor: Colors.red,
    );
  }

  _myExpansionPanelRadio(ExpandedBean bean) {
    return ExpansionPanelRadio(
      value: bean,
      headerBuilder: (context, isExpanded) {
        return Text('ExpansionPanelRadio header');
      },
      body: ListView(
        shrinkWrap: true,
        children: [
          Text('ExpansionPanelRadio body'),
          Text('ExpansionPanelRadio body'),
          Text('ExpansionPanelRadio body'),
        ],
      ),
      canTapOnHeader: true,
    );
  }

6.ExpansionTile属性

  • leading:头widget
  • title:标题
  • subtitle:副标题
  • backgroundColor:展开时背景色
  • onExpansionChanged:展开回调
  • children = const <Widget>[]:子widget
  • trailing:尾部widget
  • initiallyExpanded = false:初始是否展开
  • maintainState = false:
  • tilePadding:内边距
  • expandedCrossAxisAlignment:次轴对齐
  • expandedAlignment:主轴对齐
  • childrenPadding:子内容内边距
1601804222(1).png
1601804232(1).png
  _myExpansionTile() {
    return ExpansionTile(
      leading: Icon(Icons.account_circle),
      title: Text('ExpansionTile title'),
      subtitle: Text('ExpansionTile subtitle'),
      // backgroundColor: Colors.amber,
      onExpansionChanged: (isExpanded) {
        print('isExpanded = $isExpanded');
      },
      children: [
        Text('ExpansionTile children'),
        Text('ExpansionTile children'),
        Text('ExpansionTile children'),
        Text('ExpansionTile children'),
      ],
      trailing: Icon(Icons.print),
      initiallyExpanded: true,
      maintainState: false,
      tilePadding: EdgeInsets.all(10),
      expandedAlignment: Alignment.center,
      expandedCrossAxisAlignment: CrossAxisAlignment.center,
      childrenPadding: EdgeInsets.all(10),
    );
  }

下一节:Material组件之Stepper

Flutter(35):Material组件之Stepper

Flutter教学目录持续更新中

Github源代码持续更新中

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 157,373评论 4 361
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,732评论 1 290
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 107,163评论 0 238
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,700评论 0 202
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,036评论 3 286
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,425评论 1 211
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,737评论 2 310
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,421评论 0 194
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,141评论 1 239
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,398评论 2 243
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,908评论 1 257
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,276评论 2 251
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,907评论 3 233
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,018评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,772评论 0 192
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,448评论 2 269
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,325评论 2 261