Flutter可折叠/可扩展卡

时间:2019-05-23 10:17:53

标签: flutter flutter-layout

我正在尝试匹配此设计

enter image description here

在点击时,卡片应展开

enter image description here

我无法使用包裹扩展图块的卡,因为扩展图块基本上只有一行,因此我尝试遵循此示例 flutter_catalog

我在Google上搜索了很多东西,却找不到我想要达到的目标的例子,在stackoverflow上我能找到的最接近的东西是other question上没有可折叠/可扩展的卡片吗?

1 个答案:

答案 0 :(得分:2)

您绝对可以使用Card包装ExpansionTileExpansionTile具有title属性,该属性采用Widget,因此您可以将任何想要的Widget传递给它。

凌乱的示例代码,但希望您能理解:

class ExpandedTile extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Card(
      shape: RoundedRectangleBorder(
          borderRadius: BorderRadius.all(Radius.circular(15.0))),
      elevation: 2,
      margin: EdgeInsets.all(12.0),
      child: Padding(
        padding: const EdgeInsets.all(8.0),
        child: ExpansionTile(
          backgroundColor: Colors.white,
          title: _buildTitle(),
          trailing: SizedBox(),
          children: <Widget>[
            Padding(
              padding: const EdgeInsets.all(8.0),
              child: Row(
                children: <Widget>[
                  Text("Herzlich Willkommen"),
                  Spacer(),
                  Icon(Icons.check),
                ],
              ),
            ),
            Padding(
              padding: const EdgeInsets.all(8.0),
              child: Row(
                children: <Widget>[
                  Text("Das Kursmenu"),
                  Spacer(),
                  Icon(Icons.check),
                ],
              ),
            )
          ],
        ),
      ),
    );
  }

  Widget _buildTitle() {
    return Column(
      crossAxisAlignment: CrossAxisAlignment.start,
      children: <Widget>[
        Row(
          children: <Widget>[
            Text("MODUL 1"),
            Spacer(),
            Text("Mehr"),
          ],
        ),
        Text("Kursubersicht"),
        Row(
          children: <Widget>[
            Text("6 Aufgaben"),
            Spacer(),
            FlatButton.icon(
              shape: RoundedRectangleBorder(
                  borderRadius: BorderRadius.all(Radius.circular(15.0))),
              padding: EdgeInsets.symmetric(vertical: 4.0, horizontal: 8.0),
              color: Colors.blue,
              textColor: Colors.white,
              onPressed: () {},
              icon: Icon(Icons.play_arrow),
              label: Text("Fortsetzen"),
            ),
          ],
        ),
      ],
    );
  }
}

产生

Screenshot

以及点击时

Screenshot