Flutter Firebase Analytics: отслеживание изменений страницы с помощью onGenerateRoute - PullRequest
1 голос
/ 22 апреля 2020

У меня включена аналитика firebase для моего приложения, и я пытаюсь получить представление отладки firebase, чтобы показать изменения моей страницы. С кодом ниже, в настоящее время ничего не отслеживается, и я не понимаю, почему. Я следовал документации firebase для отслеживания просмотров страниц, но, видимо, мне чего-то не хватает, когда дело доходит до использования onGenerateRoute.

My main:

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;
  }
}

Ранее я использовал аналитику для автоматического отслеживания изменений страницы в предыдущем приложении, но в своей основной функции использовал метод «маршруты». Может кто-нибудь объяснить, почему я не получаю никакой обратной связи, используя этот метод выше? Должны ли экраны быть названы явно? (Что я тоже пробовал, но безуспешно)

Ответы [ 2 ]

1 голос
/ 07 мая 2020

Эй, если вы все еще ищете ответ на этот вопрос, это потому, что вы не вставляете имя в MaterialPageRoute.

Итак, в вашей функции generateRoute:

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

Это название для Firebase Analytics. Просто добавьте его для каждого случая в коммутаторе.

0 голосов
/ 07 мая 2020

Итак, @TyrellJames уже дал ответ solid выше, но вот мое решение, которое я использовал. Я закончил тем, что полностью изменил структуру своего кода, чтобы добавить значение 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, у меня это очень далеко.

...