我正在将Google Analytics(分析)添加到我的Flutter项目中。
可以将事件记录在这样的静态函数中吗?
static Future<void> logEvent(String eventName) async {
await FirebaseAnalytics().logEvent(name: eventName);
}
每次调用该函数时,都会初始化FirebaseAnalytics。
这会引起问题吗?
最佳答案
除了少量开销之外,它不会引起任何问题,但是将其作为单例很好。例如,稍后您可能会意识到,使用一些自定义逻辑包装分析报告是有意义的,并且您不想复制它。 InheritedWidget
有助于从树下的任何地方获取相同的对象实例。
class Analytics extends InheritedWidget {
final FirebaseAnalytics _analytics;
Analytics(this._analytics, Widget child) : super(child: child);
@override
bool updateShouldNotify(Analytics oldWidget) {
return _analytics != oldWidget._analytics;
}
static FirebaseAnalytics of(BuildContext context) {
final provider =
(context.getElementForInheritedWidgetOfExactType<Analytics>()?.widget) as Analytics;
assert(provider != null);
return provider._analytics;
}
}
在构建应用程序时,将其放在小部件树的op上:@override
Widget build(BuildContext context) {
FirebaseAnalytics analytics = FirebaseAnalytics();
var firebaseAnalyticsObserver = FirebaseAnalyticsObserver(
analytics: analytics,
);
return Analytics(
analytics,
MaterialApp(
navigatorObservers: [
firebaseAnalyticsObserver,
],
...
从树下下方的任何小部件访问它:Analytics.of(context).logEvent(name: "my_custom_event");
关于flutter - 通过每次在Flutter中创建一个新实例来实现FirebaseAnalytics logEvent,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61322113/