如果修改了控制器,Flutter PageRoute didComplete覆盖未完成

k7fdbhmy  于 2023-05-01  发布在  Flutter
关注(0)|答案(1)|浏览(86)

我已经在Flutter中覆盖了PageRoute中的didComplete()。
由于某些原因,控制动画控制器会停止完成路径。动画按预期处理,没有抛出错误,但是模态路由仍然阻挡下面的屏幕,即使它不可见。

@override
  void didComplete(T? result) {
    super
        .controller
        ?.animateTo(
          0,
          curve: Curves.easeOut,
          duration: reverseTransitionDuration,
        )
        .then((value) {});
    super.didComplete(result);
  }

我已经尝试添加各种处置方法,但似乎路线和控制器是正确的处置。
如果我删除控制器的动画,那么didComplete就可以按预期工作。

@override
  void didComplete(T? result) {
    super.didComplete(result);
  }

我错过了什么。

fdx2calv

fdx2calv1#

任何时候修改滚动控制器都会出现同样的问题。本质上,即使它确实弹出,路线也不会最终确定,因为并非所有的资源都是完整的。在本例中,该资源是AnimationController。
因此,解决方案是一旦对控制器的修改完成,就最终确定路线:

Navigator.of(context).finaliseRoute(this);

如果在路线内的小部件中执行此操作,则可以通过访问ModalRoute继承的小部件和Navigator来实现:

ModalRoute? route = ModalRoute.of(context);

Navigator.of(context).finalizeRoute(route);

相关问题