es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Flutter Firebase analytics Seguimiento del cambio de pantalla de la aplicación con Navigator 2.0

Todos los ejemplos que he encontrado utilizan “navigatorObservers” del constructor de MaterialApp.

static FirebaseAnalytics analytics = FirebaseAnalytics.instance;
static FirebaseAnalyticsObserver observer =
    FirebaseAnalyticsObserver(analytics: analytics);
@override
Widget build(BuildContext context) {
  return MaterialApp.router(
    title: 'Firebase Analytics Demo',
    routeInformationParser: _router.routeInformationParser,
    routerDelegate: _router.routerDelegate,
    routeInformationProvider: _router.routeInformationProvider,
    theme: ThemeData(
      primarySwatch: Colors.blue,
    ),
    // No hay una propiedad similar a "navigatorObservers" en MaterialApp.router
    // para adjuntar un observador de navegación.
    // ¿Hay alguna solución alternativa o sugerencias para esto?
    // -----------------------------------------------------------------------------
  );
}
Tags:  ,

Answer

  1. Avatar for davy.ai

    Hasta ahora, no existe un equivalente directo para adjuntar un navigatorObserver mientras se utiliza el patrón Navigator 2.0 con el MaterialApp.router. Sin embargo, puedes lograr la misma funcionalidad utilizando la clase Router y sobrescribiendo el método build en MaterialApp.router de tu aplicación.

    Aquí tienes un ejemplo de cómo puedes utilizar la clase Router para rastrear eventos de cambio de pantalla para Firebase Analytics:

    class MyApp extends StatelessWidget {
      static FirebaseAnalytics analytics = FirebaseAnalytics();
      static FirebaseAnalyticsObserver observer =
          FirebaseAnalyticsObserver(analytics: analytics);
    
      @override
      Widget build(BuildContext context) {
        return MaterialApp.router(
          title: 'Firebase Analytics Demo',
          routerDelegate: MyRouterDelegate(),
          routeInformationParser: MyRouteInformationParser(),
        );
      }
    }
    
    class MyRouterDelegate extends RouterDelegate<myroutepath>
        with ChangeNotifier, PopNavigatorRouterDelegateMixin<myroutepath> {
      @override
      final GlobalKey<navigatorstate> navigatorKey;
    
      MyRouterDelegate() : navigatorKey = GlobalKey<navigatorstate>() {
        FirebaseAnalytics().setCurrentScreen(
            screenName: 'Pantalla de inicio',
            screenClassOverride: 'MyApp');
      }
    
      @override
      Widget build(BuildContext context) {
        return Navigator(
          key: navigatorKey,
          observers: [
            FirebaseAnalyticsObserver(analytics: MyApp.analytics),
          ],
          pages: [
            // añade tus páginas aquí
          ],
          onPopPage: (route, result) {
            if (!route.didPop(result)) {
              return false;
            }
            // maneja la eliminación de páginas aquí
            return true;
          },
        );
      }
    }
    

    En este ejemplo, primero defines tu instancia de FirebaseAnalytics y FirebaseAnalyticsObserver, al igual que lo harías con el constructor de MaterialApp.

    Luego, en tu clase MyApp, defines tu MaterialApp.router y pasas una instancia de MyRouterDelegate como tu routerDelegate.

    En MyRouterDelegate, sobrescribes el método build y devuelves un widget Navigator, al igual que lo harías con MaterialApp. Sin embargo, en el widget Navigator, estableces la propiedad observers como un array que contiene tu instancia de FirebaseAnalyticsObserver.

    Luego puedes añadir tus páginas a la propiedad pages del widget Navigator.

    Por último, manejas la eliminación de páginas en la devolución de llamada onPopPage.

    Ten en cuenta que en el constructor de MyRouterDelegate, estamos estableciendo el nombre de pantalla inicial utilizando FirebaseAnalytics().setCurrentScreen. Puedes añadir esto a cualquier otra pantalla que desees rastrear.

    Siguiendo este enfoque, deberías poder rastrear eventos de cambio de pantalla utilizando Firebase Analytics con el patrón Navigator 2.0.

Comments are closed.