You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter列表滚动到底部添加额外空间,避免被FloatingActionButton遮挡

解决列表底部被FloatingActionButton遮挡的问题

我通过List.generate创建了展示全部交易的列表,页面中存在一个FloatingActionButton。当滚动至列表最后一项交易时,交易卡片的右侧会被FloatingActionButton遮挡,无法完整查看,希望在列表滚动到底部时添加额外空间避免遮挡。

我的实现代码:

class ShowTransactionWidget extends StatelessWidget {
  final List<Transaction> mylist;

  ShowTransactionWidget({required this.mylist});

  //Todo add little bit more space while scrolling


  @override
  Widget build(BuildContext context) {
    return Column(
      mainAxisAlignment: MainAxisAlignment.spaceBetween,
      children: [
        Padding(
          padding: EdgeInsets.only(left: 20, right: 20),
          child: Column(
            children: List.generate(mylist.length, (index) {
              return Column(
                children: [
                  TransactionCard(transaction: mylist[index],),
                  const Padding(
                    padding: const EdgeInsets.only(left: 20.0, top: 8.0),
                    child: Divider(
                      thickness: 0.9,
                    ),
                  )
                ],
              );
            }),
          ),
        ),
      ],
    );
  }

}

解决方案

方法一:直接在列表末尾添加固定间距

在List.generate生成的列表后追加一个带高度的SizedBox,预留出足够避开FAB的空间:

// 修改Column的children部分
children: [
  ...List.generate(mylist.length, (index) {
    return Column(
      children: [
        TransactionCard(transaction: mylist[index],),
        const Padding(
          padding: const EdgeInsets.only(left: 20.0, top: 8.0),
          child: Divider(
            thickness: 0.9,
          ),
        )
      ],
    );
  }),
  // 底部额外空间,高度可根据FAB大小调整(默认FAB高56,加16边距总共72,这里设80留余量)
  SizedBox(height: 80),
],

方法二:改用ListView(推荐)

如果列表需要滚动,直接用ListView.builder替代Column,通过设置padding属性给底部留空间,同时ListView自带滚动优化:

@override
Widget build(BuildContext context) {
  return Padding(
    padding: EdgeInsets.only(left: 20, right: 20),
    child: ListView.builder(
      // 底部预留空间
      padding: EdgeInsets.only(bottom: 80),
      itemCount: mylist.length,
      itemBuilder: (context, index) {
        return Column(
          children: [
            TransactionCard(transaction: mylist[index],),
            const Padding(
              padding: const EdgeInsets.only(left: 20.0, top: 8.0),
              child: Divider(
                thickness: 0.9,
              ),
            )
          ],
        );
      },
    ),
  );
}

方法三:动态适配FAB高度

如果FAB是自定义尺寸,可通过MediaQuery获取系统底部内边距,再加上FAB高度和额外边距,实现动态适配:

@override
Widget build(BuildContext context) {
  // 计算所需底部间距:系统底部内边距 + FAB默认高度56 + 额外边距16
  final bottomSpacing = MediaQuery.of(context).padding.bottom + 56 + 16;

  return Column(
    mainAxisAlignment: MainAxisAlignment.spaceBetween,
    children: [
      Padding(
        padding: EdgeInsets.only(left: 20, right: 20),
        child: Column(
          children: [
            ...List.generate(mylist.length, (index) {
              return Column(
                children: [
                  TransactionCard(transaction: mylist[index],),
                  const Padding(
                    padding: const EdgeInsets.only(left: 20.0, top: 8.0),
                    child: Divider(
                      thickness: 0.9,
                    ),
                  )
                ],
              );
            }),
            SizedBox(height: bottomSpacing),
          ],
        ),
      ),
    ],
  );
}

内容的提问来源于stack exchange,提问作者Irfan Ganatra

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 17:35:25