【问题标题】:Flutter: Navigator.pushReplacement / pushAndRemoveUntil kill animationsFlutter:Navigator.pushReplacement / pushAndRemoveUntil 杀死动画
【发布时间】:2018-04-12 01:46:17
【问题描述】:

我想知道是否有一种方法可以使用 Navigator 调用,它不允许用户向后导航并保持 Hero Widget 的动画完好无损?我在 Splash 和 Login 屏幕之间有一个英雄小部件图像转换,但我想阻止用户从启动画面返回。 Navigator.pushAndRemoveUntil 和 Navigator.pushReplacement 都杀死动画过渡动画。

【问题讨论】:

  • 我也遇到了同样的情况,使用 pushReplacement 时英雄动画似乎不起作用,你有没有找到解决方案?

标签: navigation dart flutter


【解决方案1】:

我的解决方案,主要是因为 WillPopScope 污染了另一个页面并阻止了 Android 上应该关闭应用程序的硬件按钮:

  Future<void> pushAndReplace(String routeName) async {
    final current = ModalRoute.of(context);
    Navigator.pushNamed(context, '/login');
    await Future.delayed(Duration(milliseconds: 1));
    Navigator.removeRoute(context, current);
  }

【讨论】:

    【解决方案2】:

    您可以使用WillPopScope 包装小部件,然后始终在onWillPop 属性上返回false,以防止它再次导航回来。例如;

    return WillPopScope( onWillPop: () async => Future.value(false), child: Scaffold( body: Container() ... )

    【讨论】:

      【解决方案3】:

      任何时候您使用Navigator.xxxx,您都将切换到一个全新的视图。我可能错了,但我很确定动画需要包含在单个视图中,并且不能在视图之间进行。

      您可能想考虑使用 States 来处理此问题。我使用flutter_redux 来管理我的颤振应用程序中的状态。它最适合需要处理复杂状态的大型应用程序。对于简单的状态管理,您可以使用 Flutter 的内置状态功能。 They have an interactivity tutorial here

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-05-20
        • 1970-01-01
        • 2021-10-14
        • 1970-01-01
        • 1970-01-01
        • 2012-05-28
        • 1970-01-01
        • 2016-06-22
        相关资源
        最近更新 更多