Flutter Firebase Analytics:使用 onGenerateRoute 跟踪页面更改
Flutter Firebase Analytics: Track page changes with onGenerateRoute
我为我的应用程序启用了 firebase 分析,我正在尝试让 firebase 调试视图显示我的页面更改。使用下面的代码,目前没有任何东西被跟踪,我不明白为什么。我已经按照 firebase 文档跟踪页面浏览量,但显然我在使用 onGenerateRoute 时遗漏了一些东西。
我的主要:
class MyApp extends StatelessWidget {
static FirebaseAnalytics analytics = FirebaseAnalytics();
static FirebaseAnalyticsObserver observer =
FirebaseAnalyticsObserver(analytics: analytics);
@override
Widget build(BuildContext context) {
return MaterialApp(
debugShowCheckedModeBanner: false,
title: "localhour",
onGenerateRoute: router.generateRoute,
initialRoute: '/',
navigatorObservers: <NavigatorObserver>[observer],
),
);
}
}
我的 generateRoute 函数:
Route<dynamic> generateRoute(RouteSettings settings) {
switch (settings.name) {
case '/':
return MaterialPageRoute(builder: (context) => RootPage());
break;
case '/login':
return MaterialPageRoute(builder: (context) => LoginPage());
break;
case '/home':
var user = settings.arguments;
return MaterialPageRoute(
builder: (context) => HomePage(
user: user,
));
break;
case '/store':
return MaterialPageRoute(builder: (context) => StorePage());
break;
case '/store-details':
var argument = settings.arguments;
return MaterialPageRoute(
builder: (context) => StoreDetails(
storeDetails: argument,
));
break;
}
}
我之前在以前的应用程序中使用过分析来自动跟踪页面更改,但在我的主要功能中使用了 "routes" 方法。有人可以解释为什么我使用上面的这种方法没有得到任何反馈吗?屏幕是否必须明确命名? (我也尝试过,但没有成功)
嘿,如果您仍在寻找这个问题的答案,那是因为您没有将名称推入 MaterialPageRoute。
所以在你的 generateRoute 函数中:
'/login':
return MaterialPageRoute(
builder: (context) => LoginPage(),
settings: RouteSettings(name: settings.name));
break;
这将为您将该名称推送到 Firebase Analytics。只需为开关中的每个案例添加它。
所以,@TyrellJames 已经在上面给出了可靠的答案,但这是我使用的解决方案。我最终完全更改了我的代码结构以添加 routeName 值,因此 Firebase 实际上知道我的页面被称为:
Route<dynamic> generateRoute(RouteSettings settings) {
switch (settings.name) {
case RootRoute:
return _getPageRoute(
routeName: settings.name,
viewToShow: RootPage(),
);
.
.
.
}
然后我调用 _getPageRoute 函数:
PageRoute _getPageRoute({String routeName, Widget viewToShow}) {
return MaterialPageRoute(
settings: RouteSettings(
name: routeName,
),
builder: (_) => viewToShow
);
}
这几乎就是@TyrellJames 所做的,我的只是长途跋涉。
我为我的应用程序启用了 firebase 分析,我正在尝试让 firebase 调试视图显示我的页面更改。使用下面的代码,目前没有任何东西被跟踪,我不明白为什么。我已经按照 firebase 文档跟踪页面浏览量,但显然我在使用 onGenerateRoute 时遗漏了一些东西。
我的主要:
class MyApp extends StatelessWidget {
static FirebaseAnalytics analytics = FirebaseAnalytics();
static FirebaseAnalyticsObserver observer =
FirebaseAnalyticsObserver(analytics: analytics);
@override
Widget build(BuildContext context) {
return MaterialApp(
debugShowCheckedModeBanner: false,
title: "localhour",
onGenerateRoute: router.generateRoute,
initialRoute: '/',
navigatorObservers: <NavigatorObserver>[observer],
),
);
}
}
我的 generateRoute 函数:
Route<dynamic> generateRoute(RouteSettings settings) {
switch (settings.name) {
case '/':
return MaterialPageRoute(builder: (context) => RootPage());
break;
case '/login':
return MaterialPageRoute(builder: (context) => LoginPage());
break;
case '/home':
var user = settings.arguments;
return MaterialPageRoute(
builder: (context) => HomePage(
user: user,
));
break;
case '/store':
return MaterialPageRoute(builder: (context) => StorePage());
break;
case '/store-details':
var argument = settings.arguments;
return MaterialPageRoute(
builder: (context) => StoreDetails(
storeDetails: argument,
));
break;
}
}
我之前在以前的应用程序中使用过分析来自动跟踪页面更改,但在我的主要功能中使用了 "routes" 方法。有人可以解释为什么我使用上面的这种方法没有得到任何反馈吗?屏幕是否必须明确命名? (我也尝试过,但没有成功)
嘿,如果您仍在寻找这个问题的答案,那是因为您没有将名称推入 MaterialPageRoute。
所以在你的 generateRoute 函数中:
'/login':
return MaterialPageRoute(
builder: (context) => LoginPage(),
settings: RouteSettings(name: settings.name));
break;
这将为您将该名称推送到 Firebase Analytics。只需为开关中的每个案例添加它。
所以,@TyrellJames 已经在上面给出了可靠的答案,但这是我使用的解决方案。我最终完全更改了我的代码结构以添加 routeName 值,因此 Firebase 实际上知道我的页面被称为:
Route<dynamic> generateRoute(RouteSettings settings) {
switch (settings.name) {
case RootRoute:
return _getPageRoute(
routeName: settings.name,
viewToShow: RootPage(),
);
.
.
.
}
然后我调用 _getPageRoute 函数:
PageRoute _getPageRoute({String routeName, Widget viewToShow}) {
return MaterialPageRoute(
settings: RouteSettings(
name: routeName,
),
builder: (_) => viewToShow
);
}
这几乎就是@TyrellJames 所做的,我的只是长途跋涉。