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

Flutter重写PageRoute的didComplete后,控制动画控制器致路由无法完成

问题根源

你当前的问题核心是方法调用顺序错误:你先启动了路由的反向退出动画,紧接着就调用了super.didComplete(result)。这会让Flutter框架直接认为路由已经完成生命周期,开始执行清理逻辑,但此时退出动画还在运行中,框架无法同步路由的视觉状态和逻辑状态,最终导致路由虽然视觉上不可见,但它的遮罩层或Overlay Entry没有被彻底移除,从而持续遮挡下方屏幕。

修复方案

将super.didComplete(result)移到动画完成的回调中,等退出动画彻底结束后再通知框架完成路由生命周期:

@override
void didComplete(T? result) {
  super.controller?.animateTo(
    0,
    curve: Curves.easeOut,
    duration: reverseTransitionDuration,
  ).then((_) {
    // 等待动画执行完毕后,再触发路由完成逻辑
    super.didComplete(result);
  });
}
补充说明

didComplete是Flutter路由生命周期中标记路由结束的关键方法,必须在路由的退出动画完全结束后调用,这样框架才能正确清理路由对应的Overlay资源、更新路由栈状态,确保路由从视觉到逻辑层面都彻底退出,不会留下残留的遮挡层。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 01:28:10