flutter - 通过每次在Flutter中创建一个新实例来实现FirebaseAnalytics logEvent

标签 flutter dart google-analytics firebase-analytics

我正在将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/

相关文章:

Flutter-web:浏览器刷新时提供程序丢失状态

java - 如何将片段 Activity 添加到 MainActivity.java 或 MainAcyivity.kt

video - 用 flutter 捕捉视频

flutter - 在处理JSON时 retrofit Dart异常

flutter - 窗口小部件没有更新

java - 创建 csv 文件 java

Flutter 驱动程序 - 在屏幕外的字段中输入文本

dart - Flutter:下拉列表中的选定值

javascript - 谷歌通用分析 : push several sub-events in one impressions event (E-commerce)

regex - 需要为时事通讯注册跟踪编写 Google Analytics 正则表达式模式