使用Firebase Analytics在Flutter中跟踪屏幕浏览情况

9
在Flutter中,使用分析包(例如Firebase Analytics,如跟踪屏幕),最佳位置手动记录屏幕视图是什么?
查看Flutter生命周期,不清楚何时跟踪屏幕视图是有意义的。
对于StatelessWidget,我认为build()可能是有意义的,因为我猜它每次只调用一次屏幕视图。
那么对于StatefulWidget呢?在这种情况下,build()将毫无用处,因为它可能被多次调用。其他候选项是initState(),createState()或构造函数,这些函数似乎只会在屏幕视图中调用一次,但我猜它们可能会被多次调用,因为上层的小部件正在重新构建。

你说得没错,对于StatelessWidget应该使用build()方法,而对于StatefulWidget则可以使用initState()方法。但是在这两种情况下,数据都可以从外部进行更改并传入,因此这并不是100%准确的,具体取决于你的实现方式。 - CopsOnRoad
@CopsOnRoad 谢谢,这正是我想到的,所以听起来似乎没有一个完美的解决方案 :( - AdamK
1
先生,您是谷歌员工,直接与Flutter团队联系应该轻而易举。您只需发信息就可以为自己和我们解决问题。感谢您的帮助,先生 :) - CopsOnRoad
1
@CopsOnRoad 哈哈,我不在Flutter团队工作,但我可以问问他们。我更喜欢在SO上提问和回答,这样其他人也可以看到答案 :) 话虽如此,我会看看能否让团队中的某个人加入讨论。 - AdamK
1个回答

10
答案是:这取决于具体情况。对于一个StatelessWidget,在build()中加入分析事件可能是合适的,但前提是父部件不会频繁重新构建。对于一个 StatefulWidget也是一样的道理,但你还需要考虑由于状态更改而引起的重新构建(很可能经常发生)。
实际上,最安全的方法是不要在widget生命周期的任何部分调用Analytics事件,而是在可能触发屏幕的UI事件上进行调用,例如打开编辑屏幕的编辑按钮。但是,这种方法的问题是屏幕可能从应用程序的各种位置打开(这意味着必须在所有这些位置重复Analytics调用)。
这意味着最好的选择可能是将Analytics与PageRoute转换绑定起来,以便每当执行页面路由时都会一致地调用它。这在文档中有所说明。这将无法跟踪标签栏内的屏幕和其他类型的UI导航,但正如文档所说的那样,处理它的一种方式是实现RouteAware并将其订阅为FirebaseAnalyticsObserver(示例标签实现)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接