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

古德尼·帕尔

我正在将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");

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何从存储在CouchDB中的Serilog反序列化LogEvent

来自分类Dev

Serilog访问LogEvent中传递给日志记录语句的原始对象

来自分类Dev

LOGEVENT记录到WSO2 BAM

来自分类Dev

使用logevent将日志发送到BAM

来自分类Dev

是否有必要对analytics()。logEvent使用await?

来自分类Dev

建设者-每次创建一个新实例?

来自分类Dev

如何使用Log4j2 xml重写附加程序在登录文件之前修改LogEvent

来自分类Dev

创建一个新变量来标记R中绝对值更改的每个实例

来自分类Dev

在每次迭代中创建一个新变量

来自分类Dev

如何通过一个类和方法来创建一个类的实例?

来自分类Dev

每次调用Java时,Java都会创建一个新的iterator()实例吗?

来自分类Dev

为什么Try-With-Resources不会每次都创建一个新实例

来自分类Dev

是否可以要求一个类创建一个新实例而不必每次都调用 new?

来自分类Dev

如何通过平均一些列来从existig数据帧中创建一个新的数据帧

来自分类Dev

我需要创建一个新列来汇总特定观察发生的实例数量

来自分类Dev

创建一个列来标记条件的任何实例通过的位置

来自分类Dev

Python:获取两个列表并通过合并它们来创建一个新列表

来自分类Dev

如何确保每个设备创建一个房间,而不是每次启动应用程序时都创建一个新实例

来自分类Dev

我想使用由另一个类实现的接口来调用函数,而不用在 C# 中创建该类的实例

来自分类Dev

每次循环都创建一个新变量吗?

来自分类Dev

为循环的每次迭代创建一个新列表

来自分类Dev

每次单击按钮时创建一个新表单

来自分类Dev

蟒蛇:列表追加-每次创建一个新列表?

来自分类Dev

每次调用方法时创建一个新的Set

来自分类Dev

如何通过更改其中的一个特定字段来创建新的json字符串?

来自分类Dev

通过弹出最后一个类型来创建新的元组类

来自分类Dev

通过子集另一个并添加后缀来循环创建多个新数据帧

来自分类Dev

通过修改另一个应用程序来创建新应用程序

来自分类Dev

jq 通过转换现有的来创建一个新的 json

Related 相关文章

  1. 1

    如何从存储在CouchDB中的Serilog反序列化LogEvent

  2. 2

    Serilog访问LogEvent中传递给日志记录语句的原始对象

  3. 3

    LOGEVENT记录到WSO2 BAM

  4. 4

    使用logevent将日志发送到BAM

  5. 5

    是否有必要对analytics()。logEvent使用await?

  6. 6

    建设者-每次创建一个新实例?

  7. 7

    如何使用Log4j2 xml重写附加程序在登录文件之前修改LogEvent

  8. 8

    创建一个新变量来标记R中绝对值更改的每个实例

  9. 9

    在每次迭代中创建一个新变量

  10. 10

    如何通过一个类和方法来创建一个类的实例?

  11. 11

    每次调用Java时,Java都会创建一个新的iterator()实例吗?

  12. 12

    为什么Try-With-Resources不会每次都创建一个新实例

  13. 13

    是否可以要求一个类创建一个新实例而不必每次都调用 new?

  14. 14

    如何通过平均一些列来从existig数据帧中创建一个新的数据帧

  15. 15

    我需要创建一个新列来汇总特定观察发生的实例数量

  16. 16

    创建一个列来标记条件的任何实例通过的位置

  17. 17

    Python:获取两个列表并通过合并它们来创建一个新列表

  18. 18

    如何确保每个设备创建一个房间,而不是每次启动应用程序时都创建一个新实例

  19. 19

    我想使用由另一个类实现的接口来调用函数,而不用在 C# 中创建该类的实例

  20. 20

    每次循环都创建一个新变量吗?

  21. 21

    为循环的每次迭代创建一个新列表

  22. 22

    每次单击按钮时创建一个新表单

  23. 23

    蟒蛇:列表追加-每次创建一个新列表?

  24. 24

    每次调用方法时创建一个新的Set

  25. 25

    如何通过更改其中的一个特定字段来创建新的json字符串?

  26. 26

    通过弹出最后一个类型来创建新的元组类

  27. 27

    通过子集另一个并添加后缀来循环创建多个新数据帧

  28. 28

    通过修改另一个应用程序来创建新应用程序

  29. 29

    jq 通过转换现有的来创建一个新的 json

热门标签

归档