带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
相关产品推荐
相关产品推荐

