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

