我的应用程序启用了firebase分析功能,我试图让firebase debug-view显示我的页面变化。使用下面的代码,目前没有任何东西被跟踪,我不明白为什么。我遵循了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;
}
}
我以前在一个应用程序中使用过分析技术来自动跟踪页面变化 但在我的主函数中使用了 "路由 "方法。谁能解释一下为什么我使用上面这个方法没有得到任何反馈?屏幕必须要明确命名吗?(我也试过,但不成功)
如果你还在寻找答案,那是因为你没有把名字推送到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做的差不多,我的只是绕了一圈。