我正在为我的 Flutter 项目设置 Firebase Analytics Package。库中提供的 sample 传递用于跟踪事件的 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 实例传递给小部件构造函数。
关于firebase - 如何在不在每个屏幕中传递 'analytics/observer' 对象的情况下在 Flutter 中设置 Firebase Analytics 自定义事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57003787/