Flutter:如何检查窗口小部件/页面是否被渲染?

Kos*_*dov 3 flutter

有什么像 componentWillDisapear() RN?

我的问题的详细信息:

我有两个屏幕:“主页”和“详细信息”。我的应用程序使用“ firebase_admob”进行广告,而“ firebase_admob”(请参见下面的屏幕截图)只能为整个应用程序显示固定的横幅。因此,当您转到其他屏幕时,您也可以看到它,但是我仅在主屏幕中需要它。这意味着,当用户导航到“详细信息”时,我必须将其隐藏。怎么做?

注意:我想dispose()在用户离开主屏幕时打电话。要渲染横幅,您需要show()BannerAd课堂上调用,而当您需要隐藏时,只需调用dispose。

在此处输入图片说明

Kos*_*dov 6

下面的代码允许检查页面是否对用户可见:

import 'package:flutter/material.dart';

class TestWidget extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    print('TestWidget: ${ModalRoute.of(context).isCurrent}');
    return Container();
  }
}
Run Code Online (Sandbox Code Playgroud)

并且此示例可以检查何时更改了路线。但是您无法获得当前页面名称。

  • 您不能在后台(其他页面)使用此代码。它将抛出“查找已停用小部件的祖先是不安全的”。 (2认同)

Gra*_*amD 6

作为对 Kostya Vyrodov 的回答的补充以及对他的评论“但您无法获取当前页面名称。”的回应,以下代码片段将打印当前页面名称。

print("context.widget.toStringShort: ${context.widget.toStringShort()}");
Run Code Online (Sandbox Code Playgroud)

通常,这最好在页面的 initState 中使用,以将页面名称保存到全局变量中,以便在应用程序的其他地方使用。例如,我在 _firebaseMessaging.configure() 方法中将其与 Firebase Cloud Messaging 结合使用,以确定特定的导航要求。如果有人觉得这有用,请点赞。