如何知道页面是否打开/添加到导航器堆栈?

Ram*_*him 6 dart flutter flutter-layout

我有三页,每页都StatefulWidget放在单独的 dart 文件中,命名为:

welcome.dart
page_01.dart
page_02.dart
Run Code Online (Sandbox Code Playgroud)

我使用像这样的pushNamed功能打开每个页面Navigator

Navigator.of(context).pushNamed('/pageName');
Run Code Online (Sandbox Code Playgroud)

这是通过自定义RouteGenerator添加到我的应用程序主MaterialApp小部件来实现的。

假设我依次打开欢迎页面,然后是page_01,然后是page_02。现在我正在查看位于导航堆栈顶部的page_02。我想知道page_01是否打开/添加到导航堆栈及其索引号,在这种情况下应该有索引1

如何知道页面是否在导航堆栈中打开并获取其索引号?

Har*_*shi 6

的状态类Navigator包含一个名为 的小部件列表List<Route<dynamic>> _history

由于这个值被保留private并且没有公开getter提供,我们无法找到任何给定时刻推送的小部件的状态。

但是,NavigatorState确实提供了一些 getter 来了解 的极端状态_history

  1. bool get isCurrent // 如果当前小部件/路由位于堆栈顶部
  2. bool get isActive // 如果当前小部件/路由在导航器上
  3. bool get isFirst // 如果当前小部件/路由位于堆栈底部

由于它们都没有将任何小部件/路由作为参数,因此这些 getter 仅用于this为每个状态查询生成结果。我们无法获取有关堆栈中但在查询时未呈现的小部件的信息。

恐怕我找不到任何其他详细信息来了解有关其他路线状态的更多信息。

我已经提到navigator.dart了这些细节的文件,因为大多数属性都是私有的,在线 API 文档没有帮助。

如果有人能提供更多细节,请告诉我。:D