Flutter:如何知道页面是否已打开/添加到Navigator堆栈?

时间:2019-12-18 23:24:04

标签: flutter dart flutter-layout

我有三个页面,每个页面是一个StatefulWidget,它被放入名为的单独dart文件中:

welcome.dart
page_01.dart
page_02.dart

我使用 Navigator pushNamed 功能打开每个页面,如下所示:

Navigator.of(context).pushNamed('/pageName');

这可以通过将自定义 RouteGenerator 添加到我的应用主 MaterialApp 小部件中来实现。

有关RouteGenerator和使用pushNamed导航的更多信息,这里:https://resocoder.com/2019/04/27/flutter-routes-navigation-parameters-named-routes-ongenerateroute/

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

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

谢谢

1 个答案:

答案 0 :(得分:0)

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

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

但是,NavigatorState确实提供了一些吸气剂来了解_history的极端状态:

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

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

恐怕我找不到其他详细信息来详细了解其他路线的状态。

由于大多数属性都是私有的,因此我参考了navigator.dart文件,在线API文档没有帮助。

如果有人可以提出更多细节,请告诉我。 :D