如何检查当前小部件是否在最顶层的上下文中?

How do I check if the current widget is in the top-most context?

提问人:user22474798 提问时间:10/29/2023 更新时间:10/29/2023 访问量:34

问:

我有一个小部件,当它处于活动状态时,它每分钟运行一次。但是,当我将另一个页面推送到小部件上方时,我不希望这个函数运行,所以我想将该函数包装在一个条件中,只有当当前小部件位于最顶层的上下文中时才成立(即,没有页面被推送到它上面)。

我试图找到一种方法,但没有成功,因此任何指导或建议将不胜感激。

谢谢。

Flutter 飞镖 导航器

评论


答:

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
完全解决了我的问题。谢谢。