Flutter 颤振检查页面位于屏幕堆栈顶部

Flutter 颤振检查页面位于屏幕堆栈顶部,flutter,flutter-routes,Flutter,Flutter Routes,我有一个页面a,它在每个时间间隔执行一些任务。我只想在页面A处于活动状态并显示在屏幕上时执行这些任务 如果屏幕显示页面B,则不会执行任务 我应该如何处理这个问题?不检查页面堆栈就可以相当简单地完成。因为如果它位于页面堆栈的顶部,则只有当该页面当前处于活动状态时才是这种情况,这意味着所有其他页面都将从堆栈中删除(弹出)。如果您使用Navigator.of(context).push…调用新页面,为了“暂停”上一页,您可以等待该操作。下面的示例将创建一个周期计时器(请记住,您必须将其置于函数范围之外

我有一个页面a,它在每个时间间隔执行一些任务。我只想在页面A处于活动状态并显示在屏幕上时执行这些任务

如果屏幕显示页面B,则不会执行任务


我应该如何处理这个问题?

不检查页面堆栈就可以相当简单地完成。因为如果它位于页面堆栈的顶部,则只有当该页面当前处于活动状态时才是这种情况,这意味着所有其他页面都将从堆栈中删除(弹出)。如果您使用
Navigator.of(context).push…
调用新页面,为了“暂停”上一页,您可以
等待该操作。下面的示例将创建一个周期计时器(请记住,您必须将其置于函数范围之外,例如,处于状态),并将其分配给已存在的
timer
变量

定时器t//有状态小部件中的变量
@凌驾
void initState(){
super.initState();
//它在某个地方初始化,并且已经在工作
t=定时器周期(
持续时间(毫秒:500),
(t) =>打印(
'在此处调用函数${t.tick}',
),
);
}
_someMethodInvokingPageB()异步{
//在打开第二页之前取消计时器
//此处不需要设置状态((){})
t、 取消();
//你呼叫B页。关键是等待这个词
//等待将在此处暂停,直到您进入B页
var result=await Navigator.of(context.pushNamed)('/pageB');
//将计时器重新分配给您的计时器
//这里不需要setState((){})
t=定时器周期(
持续时间(毫秒:500),
(t) =>print('在此处调用函数${t.tick}'),
);
}
这就是计时器的原理,有一种方法,可以打开
第B页
,在打开
第B页
之前取消计时器,
等待
打开
第B页
,完成
第B页
上的内容后,将新计时器重新分配给
计时器t
变量


另外,不要忘记在
dispose()
方法中调用
t.cancel()

如果您喜欢我的答案,请随意竖起大拇指,将其设置为已接受的答案。