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 所做的,我的只是长途跋涉。