firebase - 如何在 Flutter 中设置 Firebase Analytics 自定义事件,而不在每个屏幕中传递“分析/观察者”对象
问题描述
我正在为我的 Flutter 项目设置Firebase 分析包。库中提供的示例传递analytics
用于跟踪事件和observer
跟踪选项卡更改的对象。
class MyApp extends StatelessWidget {
...
Widget build(BuildContext context) {
return MaterialApp(
title: 'Firebase Analytics Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
navigatorObservers: <NavigatorObserver>[observer],
home: MyHomePage(
title: 'Firebase Analytics Demo',
analytics: analytics,
observer: observer,
),
);
}
}
...
class _MyHomePageState extends State<MyHomePage> {
...
Future<void> _sendAnalyticsEvent() async {
await analytics.logEvent(
name: 'test_event',
parameters: <String, dynamic>{
'string': 'string',
'int': 42,
'long': 12345678910,
'double': 42.0,
'bool': true,
},
);
setMessage('logEvent succeeded');
}
...
}
我的应用程序由许多屏幕组成,其中状态通过Bloc包进行管理。mainScreen
将这些对象从发生事件的树一路向下传递是不好的。
有没有办法在不将它们传递到小部件树的情况下访问它们。或者如果我创建一个类的新对象FirebaseAnalytics
并使用生成的对象来设置一个事件,它会起作用吗?
static FirebaseAnalytics analytics = FirebaseAnalytics();
或者我应该使用 Flutter_Bloc 作为记录和设置 Flutter 事件的中心位置?
解决方案
您可以使用该provider
软件包在您的小部件树中“提供”您的分析和观察者。
class MyApp extends StatelessWidget {
static FirebaseAnalytics analytics = FirebaseAnalytics();
static FirebaseAnalyticsObserver observer =
FirebaseAnalyticsObserver(analytics: analytics);
@override
Widget build(BuildContext context) {
return MultiProvider(
providers: [
Provider<FirebaseAnalytics>.value(value: analytics),
Provider<FirebaseAnalyticsObserver>.value(value: observer),
],
child: MaterialApp(
title: 'Firebase Analytics Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
navigatorObservers: <NavigatorObserver>[observer],
home: MyHomePage(
title: 'Firebase Analytics Demo',
),
),
);
}
}
然后在您的任何子小部件中......
Future<void> _sendAnalyticsEvent() async {
FirebaseAnalytics analytics = Provider.of<FirebaseAnalytics>(context);
await analytics.logEvent(
name: 'test_event',
parameters: <String, dynamic>{
'string': 'string',
'int': 42,
'long': 12345678910,
'double': 42.0,
'bool': true,
},
);
setMessage('logEvent succeeded');
}
现在您不需要将 Firebase 实例传递给小部件构造函数。
推荐阅读
- reactjs - 如何在路由中的 next 中导入组件
- sql-server - 如何将此存储过程返回的数据集存储到 Management Studio 中的临时表中
- flutter - 颤振医生无法在 Android Studio 上运行
- android - Flutter Firebase Google 身份验证:如何在相同过期后获取新的 JWT idToken
- r - 使用 kableExtra 和 lapply 时将每个表输出到新文档
- android - getInstalledPackages 在不同的应用程序中返回不同的结果
- svelte-3 - 使用 webcomponents 和 @sveltejs/adapter-static@next 时 npm run build 失败
- html - 如何使用 JQuery 根据其 css 属性隐藏元素?
- pari - RSA 和收敛
- powerbi - PowerBI:使用数据建模创建相关下拉列表的高级过滤