我有三个页面,每个页面是一个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 。
如何知道页面是否在导航堆栈中打开并获取其索引号?
谢谢
答案 0 :(得分:0)
状态类Navigator
包含一个名为List<Route<dynamic>> _history
的小部件列表。
由于此值保留private
,并且没有提供公共getter
,因此在任何给定时刻我们都无法找到推送的小部件的状态。
但是,NavigatorState
确实提供了一些吸气剂来了解_history
的极端状态:
bool get isCurrent
//如果当前的小部件/路由位于堆栈的顶部bool get isActive
//如果当前窗口小部件/路线在导航器上bool get isFirst
//如果当前小部件/路由位于堆栈的底部由于它们都不使用小部件/路由作为参数,因此这些获取器仅使用this
来生成每个状态查询的结果。我们无法获取有关堆栈中但在查询时未呈现的小部件的信息。
恐怕我找不到其他详细信息来详细了解其他路线的状态。
由于大多数属性都是私有的,因此我参考了navigator.dart
文件,在线API文档没有帮助。
如果有人可以提出更多细节,请告诉我。 :D