Flutter Firebase Analytics。用onGenerateRoute跟踪页面变化。

问题描述 投票:1回答:1

我的应用程序启用了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;
  }
}

我以前在一个应用程序中使用过分析技术来自动跟踪页面变化 但在我的主函数中使用了 "路由 "方法。谁能解释一下为什么我使用上面这个方法没有得到任何反馈?屏幕必须要明确命名吗?(我也试过,但不成功)

firebase flutter firebase-analytics
1个回答
1
投票

如果你还在寻找答案,那是因为你没有把名字推送到MaterialPageRoute中。

所以在你的generateRoute函数中。

  '/login':
      return MaterialPageRoute(
         builder: (context) => LoginPage(),
         settings: RouteSettings(name: settings.name));
      break;

就会把名字推送到Firebase Analytics里了 只要在切换中为每个案例添加它就可以了。


0
投票

所以,@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做的差不多,我的只是绕了一圈。

© www.soinside.com 2019 - 2024. All rights reserved.