提问人:user22474798 提问时间:10/29/2023 更新时间:10/29/2023 访问量:34
如何检查当前小部件是否在最顶层的上下文中?
How do I check if the current widget is in the top-most context?
问:
我有一个小部件,当它处于活动状态时,它每分钟运行一次。但是,当我将另一个页面推送到小部件上方时,我不希望这个函数运行,所以我想将该函数包装在一个条件中,只有当当前小部件位于最顶层的上下文中时才成立(即,没有页面被推送到它上面)。
我试图找到一种方法,但没有成功,因此任何指导或建议将不胜感激。
谢谢。
答:
0赞
Codefarmer
10/29/2023
#1
您可以使用 来检查当前路由是否是导航器堆栈中最顶层的路由。ModalRoute.of(context)
import 'dart:async';
import 'package:flutter/material.dart';
class MyWidget extends StatefulWidget {
@override
_MyWidgetState createState() => _MyWidgetState();
}
class _MyWidgetState extends State<MyWidget> {
late Timer timer;
@override
void initState() {
super.initState();
timer = Timer.periodic(Duration(minutes: 1), (timer) {
if (ModalRoute.of(context)?.isCurrent ?? false) {
// Run your function here
print('Some function executed here');
}
});
}
@override
void dispose() {
timer.cancel();
super.dispose();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('My Widget'),
),
body: Center(
child: Text('My Widget Body'),
),
);
}
}
在上面的例子中,我们通过做 来检查我们所在的路由是否是当前路由。如果为 true,则周期函数将仅运行。ModalRoute.of(context)?.isCurrent
评论
0赞
user22474798
10/29/2023
完全解决了我的问题。谢谢。
评论