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

带action参数的Flutter SnackBar为何无法自动关闭?

问题原因

这是Flutter的默认设计逻辑:

  • 当你给SnackBar添加SnackBarAction交互按钮时,框架会自动忽略你设置的duration参数,改用更长的默认时长(通常约5秒),目的是确保用户有足够时间注意到并点击操作按钮。
  • 无action的SnackBar属于纯提示类型,会严格遵循你自定义的duration自动关闭。

你提供的带action的代码示例:

ScaffoldMessenger.of(context).showSnackBar(
  SnackBar(
    content: Text("An Expense Was Removed."),
    action: SnackBarAction(
      label: "Undo",
      onPressed: () {},
    ),
    duration: Duration(seconds: 1),
  ),
);

如果需要强制带action的SnackBar按自定义时长关闭,可以通过ScaffoldMessenger手动控制,比如结合Future.delayed实现:

final snackBar = SnackBar(
  content: Text("An Expense Was Removed."),
  action: SnackBarAction(
    label: "Undo",
    onPressed: () {},
  ),
);
ScaffoldMessenger.of(context).showSnackBar(snackBar);
Future.delayed(Duration(seconds: 1), () {
  ScaffoldMessenger.of(context).hideCurrentSnackBar();
});

内容的提问来源于stack exchange,提问作者Omar Azzam

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 14:28:10