Flutter ExpansionPanel 可展开的收缩控件

Posted loaderman

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Flutter ExpansionPanel 可展开的收缩控件相关的知识,希望对你有一定的参考价值。

文档:https://api.flutter.dev/flutter/material/ExpansionPanel-class.html

demo:

import ‘package:flutter/material.dart‘;

class ExpansionPanelItem 
  final String headerText;
  final Widget body;
  bool isExpanded;

  ExpansionPanelItem(
    this.headerText,
    this.body,
    this.isExpanded,
  );


class ExpansionPanelDemo extends StatefulWidget 
  @override
  _ExpansionPanelDemoState createState() => _ExpansionPanelDemoState();


class _ExpansionPanelDemoState extends State<ExpansionPanelDemo> 
  List<ExpansionPanelItem> _expansionPanelItems;

  @override
  void initState() 
    super.initState();

    _expansionPanelItems = <ExpansionPanelItem>[
      ExpansionPanelItem(
        headerText: ‘Panel A‘,
        body: Container(
          padding: EdgeInsets.all(16.0),
          width: double.infinity,
          child: Text(‘Content for Panel A.‘),
        ),
        isExpanded: false,
      ),
      ExpansionPanelItem(
        headerText: ‘Panel B‘,
        body: Container(
          padding: EdgeInsets.all(16.0),
          width: double.infinity,
          child: Text(‘Content for Panel B.‘),
        ),
        isExpanded: false,
      ),
      ExpansionPanelItem(
        headerText: ‘Panel C‘,
        body: Container(
          padding: EdgeInsets.all(16.0),
          width: double.infinity,
          child: Text(‘Content for Panel C.‘),
        ),
        isExpanded: false,
      ),
    ];
  
  
  @override
  Widget build(BuildContext context) 
    return Scaffold(
      appBar: AppBar(
        title: Text(‘ExpansionPanelDemo‘),
        elevation: 0.0,
      ),
      body: Container(
        padding: EdgeInsets.all(16.0),
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            ExpansionPanelList(
              expansionCallback: (int panelIndex, bool isExpanded) 
                setState(() 
                  _expansionPanelItems[panelIndex].isExpanded = !isExpanded;
                );
              ,
              children: _expansionPanelItems.map(
                (ExpansionPanelItem item) 
                  return ExpansionPanel(
                    isExpanded: item.isExpanded,
                    body: item.body,
                    headerBuilder: (BuildContext context, bool isExpanded) 
                      return Container(
                        padding: EdgeInsets.all(16.0),
                        child: Text(
                          item.headerText,
                          style: Theme.of(context).textTheme.title,
                        ),
                      );
                    ,
                  );
                
              ).toList(),
            ),
          ],
        ),
      ),
    );
  

效果:

技术图片

以上是关于Flutter ExpansionPanel 可展开的收缩控件的主要内容,如果未能解决你的问题,请参考以下文章

Flutter ExpansionPanel 不在 ListView 上展开

Flutter Wrap 小部件对齐:在 ExpansionPanel 内部

Flutter学习日记之ExpansionPanel/ExpansionTile实现分级列表(可开闭)

Flutter学习日记之ExpansionPanel/ExpansionTile实现分级列表(可开闭)

Flutter折叠展开列表的使用

Flutter折叠展开列表的使用