首页 > 解决方案 > 如何替换下面的路线,以便我的导航器堆栈中没有重复的路线?

问题描述

我的 Navigator Bloc 中有以下代码

  @override
  Stream<dynamic> mapEventToState(NavigatorEvent event) async* {
    final navigatorState = navigatorKey.currentState;
    if (navigatorState == null) return;

    if (event is NavigateToProfileEvent) {
      Future.delayed(Duration.zero, () {
        navigatorState.replaceRouteBelow(anchorRoute: ProfilePage.route(), newRoute: ProfilePage.route());
      });
    }
  }

这是我个人资料页面中的路线

class ProfilePage extends StatelessWidget {
  static Route route() {
    return InstantMaterialPageRoute<ProfilePage>(builder: (_) => ProfilePage());
  }

但它会引发以下错误

Unhandled Exception: 'package:flutter/src/widgets/navigator.dart': Failed assertion: line 4961 pos 12: 'anchorRoute._navigator == this': is not true.

我想防止重复路线。所以假设你有以下堆栈

第 1 页 > 第 2 页 > 第 3 页 > 第 4 页 > 第 2 页 > 第 4 页 > 第 3 页

我想让它变成

第 1 页 > 第 2 页 > 第 4 页 > 第 3 页

标签: flutterdart

解决方案


如果您在要推送的同一页面中,您可以执行以下操作:

Navigator.popAndPushNamed(context, route);

这将弹出当前页面然后推送它。

此外,如果您想向其发送一些数据,您可以尝试:

Navigator.popAndPushNamed(context, route, arguments: myParam);

推荐阅读