我想在颤动应用程序与firebase分析跟踪标签的变化。在示例应用程序中,它们只是向下传递FirebaseAnalyticsObserver:
class MyApp extends StatelessWidget {
static FirebaseAnalytics analytics = FirebaseAnalytics();
static FirebaseAnalyticsObserver observer =
FirebaseAnalyticsObserver(analytics: analytics);
@override
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 MyHomePage extends StatefulWidget {
MyHomePage({Key key, this.title, this.analytics, this.observer})
: super(key: key);
final String title;
final FirebaseAnalytics analytics;
final FirebaseAnalyticsObserver observer;
@override
_MyHomePageState createState() => _MyHomePageState(analytics, observer);
}
class _MyHomePageState extends State<MyHomePage> {
_MyHomePageState(this.analytics, this.observer);
final FirebaseAnalyticsObserver observer;
final FirebaseAnalytics analytics;但问题是我的标签页在窗口小部件树下面很远。所以很难一直往下传。
如何初始化FirebaseAnalytics观察器以跟踪正常的屏幕路由,并将其提供给选项卡页?
我使用Provider和ChangeNotifier。所以也许我可以在一个服务中初始化,然后向下提供它?例如
class Analytic extends ChangeNotifier {
static FirebaseAnalyticsObserver observer =
FirebaseAnalyticsObserver(analytics: analytics);
}发布于 2019-11-05 01:45:48
Flutter有InheritedWidget,一个可以做到这一点的小工具,它会一直向下传递数据,你可以检查official video showcase,或者一些articles。
要使用它,您需要将您的小部件包装在inheritedwidget中
class MyApp extends StatelessWidget {
final FirebaseAnalytics analytics = FirebaseAnalytics();//don't make this static please
final FirebaseAnalyticsObserver observer =
FirebaseAnalyticsObserver(analytics: analytics); //don't make this static please
@override
Widget build(BuildContext context) {
return ObserverProvider(
child: MaterialApp(
title: 'Firebase Analytics Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
navigatorObservers: <NavigatorObserver>[observer],
home: MyHomePage(
title: 'Firebase Analytics Demo'
),
),
observer:observer,
analytics:analytics
)
;
}
}
class ObserverProvider extends InheritedWidget {
const ObserverProvider(
{Widget child,
Key key,
this.observer,
this.analytics})
: super(key: key, child: child);
final FirebaseAnalytics analytics;
final FirebaseAnalyticsObserver observer;
static ObserverProvider of(BuildContext context) {
return (context.inheritFromWidgetOfExactType(ObserverProvider));
}
@override
bool updateShouldNotify(ObserverProvider e) => false;
}如果您想要访问数据,您可以为观察者调用ObserverProvider.of(context).observer,为分析调用ObserverProvider.of(context).analytics
https://stackoverflow.com/questions/58698447
复制相似问题