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

Flutter页面导航触发Hero标签重复错误求助

解决Flutter Hero标签重复错误(SnackBar相关)

问题原因

你点击保存按钮后,应该是先弹出了内容为"Data Saved"的SnackBar,紧接着触发页面跳转。而SnackBar默认启用Hero动画,它的Hero标签是基于显示文本自动生成的。当页面跳转时,当前页面的SnackBar Hero与目标页面中同标签的Hero冲突,或者SnackBar的Hero还未消失就触发路由动画,从而抛出标签重复的错误。

解决方案

  • 给SnackBar指定唯一Hero标签
    显示SnackBar时,通过heroTag参数设置一个全局唯一的值,避免与其他Hero组件标签冲突:

    ScaffoldMessenger.of(context).showSnackBar(
      SnackBar(
        content: const Text("Data Saved"),
        heroTag: "save_success_snackbar", // 设置唯一标识
      ),
    );
    
  • 禁用SnackBar的Hero动画
    如果不需要SnackBar的Hero动画,直接关闭它即可消除标签冲突问题:

    ScaffoldMessenger.of(context).showSnackBar(
      SnackBar(
        content: const Text("Data Saved"),
        heroTag: null, // 禁用Hero动画
      ),
    );
    
  • 延迟页面跳转,等SnackBar消失后再触发
    若想保留SnackBar的Hero动画,可等SnackBar完全关闭后再执行页面跳转:

    final snackBar = SnackBar(content: const Text("Data Saved"));
    ScaffoldMessenger.of(context).showSnackBar(snackBar).closed.then((_) {
      // SnackBar关闭后跳转目标页面
      Navigator.push(context, MaterialPageRoute(builder: (context) => TargetPage()));
    });
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 07:45:24