Flutter ExpansionTile 折叠组件的使用

本文介绍如何在Flutter中使用ExpansionTile组件创建可折叠的名片列表,包括ListView.builder、Card和ExpansionTile的结合应用,以及实现删除功能的具体代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ExpansionTile 折叠组件的使用


前言

在flutter 中,为我们提供了一个可折叠的组件 ExpansionTile ,而且此组件还比较容易扩展,本篇文章将记录扩展的一种,card 可折叠的名片列表。


ExpansionTile 的使用

ExpansionTile({
    Key key,
    this.leading,//和ListTitle类似,在文字前面的Widget
     this.title,//和ListTitle类似,文字
    this.backgroundColor,//背景
    this.onExpansionChanged,//展开或者关闭的监听
    this.children = const <Widget>[],//内部孩子
    this.trailing,//和ListTitle类似,右侧图标
    this.initiallyExpanded = false,//默认是否展开
  })

从上面的源码中,我们可以看到 ExpansionTile 相关的一些属性,当然,属性比较多,我挑选的是一些比较常用的属性。

这里我将使用 ListView.builder + card + ExpansionTile 来实现一个卡片型的折叠列表。

  1. 初始化数据
  final List<Map<String, dynamic>> itemList = List.generate(50,
      (index) => {"id": index, "title": "item${index}", "content": "这里是折叠的内容"});

  1. 我需要做一个删除操作,因此需要写一个删除数据的方法

  removeItem(int id) {
    itemList.removeWhere((element) => element["id"] == id);

    notifyListeners();
  }
  1. ExpansionTile 的使用
ListView.builder(
      itemCount: model.itemList.length,
      itemBuilder: (context, index) {
        var item = model.itemList[index];
        return Card(
          // 记录唯一的key
          key: PageStorageKey(item["id"]),
          child: ExpansionTile(
            expandedCrossAxisAlignment: CrossAxisAlignment.end,
            expandedAlignment: Alignment.centerRight,
            childrenPadding: EdgeInsets.all(10),
            maintainState: true,
            title: Text(
              item["title"],
            ),
            children: [
              Text(item["content"]),
              TextButton.icon(
                onPressed: () => model.removeItem(item['id']),
                icon: const Icon(Icons.delete),
                label: const Text(
                  'Remove',
                ),
                style: TextButton.styleFrom(primary: Colors.red),
              )
            ],
          ),
        );
      },
    )

运行结果如下

在这里插入图片描述


总结

整篇文章的记录比较简单,生成卡片折叠列表后,可以展开选项,并点击删除按钮,可以删除当前的cell 选项

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

半身风雪

感谢打赏,你的鼓励,是我创作的

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值