Saltar al contenido principal
@capgo/capacitor-navegación nativa Interfaz y sistema Fuente abierta

Navegación nativa plugin de Capacitor

Render native navegaciones, pestañas y conchas de transición sobre una pantalla completa de WebView Capacitor.

Instalar

bun add @capgo/capacitor-native-navigation bunx cap sync
npm, pnpm o yarn
  • npm install @capgo/capacitor-native-navigation
  • pnpm add @capgo/capacitor-native-navigation
  • yarn add @capgo/capacitor-native-navigation

Demostración

Demos de navegación nativa

Navegación nativa chrome, selección de pestañas, iconos SVG y opciones de estilo renderizados como demos animadas de WebP.

Recursos de origen
Demo de caja de navegación nativa animada que muestra un menú de navegación, pestañas y contenido de WebView
Navegación nativa
Flujo de selección de pestañas animado de navegación nativa que muestra la transición de empuje y el botón de regreso nativo
Flujo de toque
Demo animada de iconos SVG nativos que muestra iconos SVG inline, tinte nativo, etiquetas y selección de pestañas
Iconos SVG
Opciones de navegación nativa animada demostrando colores dinámicos, etiquetas seleccionadas, badges y transiciones de zoom
Opciones de estilo

Guía

Cómo usar la navegación nativa en Capacitor

Probar en dispositivo

Descargue la aplicación Capgo, luego escanea el código QR code.

Vista previa de plugin de navegación nativa code

Usando @capgo/capacitor-native-navigation

@capgo/capacitor-native-navigation Rendice una navegación nativa superior, un cuadro de pestañas inferior y cápsulas de transición de ruta sobre una pantalla completa Capacitor WebView. Su marco de framework web sigue controlando las rutas y el contenido, mientras que la nativa controla el marco de la aplicación.

Instalar y sincronizar

npm install @capgo/capacitor-native-navigation
npx cap sync

Configurar el marco nativo

import { NativeNavigation } from '@capgo/capacitor-native-navigation';

await NativeNavigation.configure({
  contentInsetMode: 'css',
  animationDuration: 360,
  colors: {
    tint: '#0f172a',
    inactiveTint: '#64748b',
  },
});

Renderizar un menú de navegación nativa

await NativeNavigation.setNavbar({
  title: 'Inbox',
  subtitle: 'Native chrome',
  transparent: true,
  backButton: { visible: false },
  rightItems: [
    {
      id: 'compose',
      title: 'Compose',
      icon: {
        svg: '<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M12 20h9"/><path d="M16.5 3.5a2.12 2.12 0 0 1 3 3L7 19l-4 1 1-4Z"/></svg>',
      },
    },
  ],
});

Renderizar un menú de pestañas nativa

await NativeNavigation.setTabbar({
  selectedId: 'inbox',
  labelVisibilityMode: 'selected',
  icons: true,
  colors: {
    dynamic: true,
    tint: '#0f172a',
    inactiveTint: '#64748b',
  },
  tabs: [
    {
      id: 'inbox',
      title: 'Inbox',
      icon: {
        svg: '<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M4 4h16v16H4z"/><path d="m4 13 4 4h8l4-4"/></svg>',
      },
    },
    {
      id: 'search',
      title: 'Search',
      icon: {
        svg: '<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><circle cx="11" cy="11" r="7"/><path d="m20 20-3-3"/></svg>',
      },
    },
  ],
});

Conectar eventos nativos a su router

Las barras nativas emiten la intención. Su router aún realiza el cambio de ruta:

await NativeNavigation.addListener('navbarBack', () => {
  router.back();
});

await NativeNavigation.addListener('navbarItemTap', ({ id }) => {
  if (id === 'compose') router.push('/compose');
});

await NativeNavigation.addListener('tabSelect', ({ id }) => {
  router.push(`/${id}`);
});

Animar cambios de ruta

Utilice una transacción de transición alrededor de la actualización de ruta web normal:

const transition = await NativeNavigation.beginTransition({
  direction: 'forward',
});

router.push('/message/42');
await router.ready?.();

await NativeNavigation.setNavbar({
  title: 'Message',
  backButton: { visible: true, title: 'Inbox' },
});

await NativeNavigation.finishTransition({
  id: transition.id,
  direction: 'forward',
});

Agregar una transición de zoom

Use the zoom helpers for routes that open from a card, grid item, or media preview.

import { beginZoomTransition, finishZoomTransition } from '@capgo/capacitor-native-navigation';

const card = document.querySelector('[data-message-card]');
if (card) {
  const transition = await beginZoomTransition(card, { cornerRadius: 18 });

  router.push('/message/42');
  await router.ready?.();

  await NativeNavigation.setNavbar({
    title: 'Message',
    backButton: { visible: true, title: 'Inbox' },
  });

  await finishZoomTransition(undefined, {
    id: transition.id,
    cornerRadius: 18,
  });
}

Amarillear el contenido con los rellenos nativos

Cuando contentInsetMode es css, el plugin escribe variables CSS para las barras nativas:

.page {
  padding-top: var(--cap-native-navigation-top);
  padding-bottom: var(--cap-native-navigation-bottom);
}

Opciones de iconos

Los iconos son descripciones nativas, no nodos de React o Vue. Utilice SVG cuando no desee empaquetar activos nativos:

const icon = {
  svg: '<svg viewBox="0 0 24 24"><path d="M3 10.5 12 3l9 7.5"/></svg>',
  template: true,
  ios: { sfSymbol: 'house.fill' },
  android: { resource: 'ic_menu_view' },
};

SVG en línea admite path, line, polyline, polygon, circley rectque cubre conjuntos de iconos comunes como Lucide y Feather.

Combine con @capgo/capacitor-transiciones

Utilice la navegación nativa para el navbar nativo, tabbar, ajustes de área segura e eventos de intención nativa. @capgo/capacitor-transitions para la pila de página de WebView debajo de ese navegador nativo.

npm install @capgo/capacitor-native-navigation @capgo/capacitor-transitions
npx cap sync

Inicialice ambos paquetes una vez:

import { NativeNavigation } from '@capgo/capacitor-native-navigation';
import '@capgo/capacitor-transitions';
import { initTransitions, setupRouterOutlet, setDirection } from '@capgo/capacitor-transitions/react';

initTransitions({ platform: 'auto' });

const outlet = document.querySelector('cap-router-outlet');
if (outlet) {
  setupRouterOutlet(outlet, { platform: 'auto', swipeGesture: 'auto' });
}

await NativeNavigation.configure({
  contentInsetMode: 'css',
});

Mantenga el outlet de transición enfocado en páginas, no duplique barras web:

<cap-router-outlet platform="auto" swipe-gesture="auto">
  <cap-page>
    <cap-content slot="content" fullscreen>
      <main class="page">Inbox content</main>
    </cap-content>
  </cap-page>
</cap-router-outlet>

Dirija ambos paquetes desde las mismas acciones de router:

async function openMessage(id: string) {
  setDirection('forward');
  await router.push(`/messages/${id}`);
  await NativeNavigation.setNavbar({
    title: 'Message',
    backButton: { visible: true, title: 'Inbox' },
  });
}

await NativeNavigation.addListener('navbarBack', () => {
  setDirection('back');
  router.back();
});

await NativeNavigation.addListener('tabSelect', ({ id }) => {
  setDirection('root');
  router.push(`/${id}`);
});

Elige una capa de animación por cambio de ruta. Deje @capgo/capacitor-transitions animar empujes de página normales, y utilice los ayudantes de zoom de la navegación nativa solo para rutas compartidas o de zoom.

Referencia Completa

Sigue adelante desde [Usando @capgo/capacitor-navegación-nativa](#)

Si estás utilizando Usando @capgo/capacitor-navegación-nativa para planificar el comportamiento de medios y interfaz nativa, conecta con @capgo/capacitor-navegación-nativa para los detalles de implementación en @capgo/capacitor-navegación-nativa Getting Started para los detalles de implementación en Getting Started Usando @capgo/capacitor-actividades-en-vivo para la capacidad nativa en Usando @capgo/capacitor-actividades-en-vivo @capgo/capacitor-actividades en vivo para el detalle de implementación en @capgo/capacitor-actividades en vivo, y Usando @capgo/capacitor-reproductor de video para la capacidad nativa en Usando @capgo/capacitor-reproductor de video.

FAQ

Preguntas frecuentes del plugin de navegación nativa

¿Cómo puedo instalar el plugin de navegación nativa en una aplicación Capacitor?

Run &quot;bun add @capgo/capacitor-native-navigation&quot; (or &quot;npm install @capgo/capacitor-native-navigation&quot;), then run &quot;bunx cap sync&quot; so the iOS and Android projects pick up the native code. Import it from &quot;@capgo/capacitor-native-navigation&quot; in your app code.

¿Funciona @capgo/capacitor-native-navigation con React, Vue y Angular?

Sí. La navegación nativa es un paquete Capacitor, por lo que funciona con cualquier framework web que se ejecute dentro de Capacitor, incluyendo Ionic, React, Vue, Angular, Svelte y JavaScript puro.

¿Cuál es la versión de Capacitor que soporta @capgo/capacitor-native-navigation?

Los plugins de Capgo siguen la versión mayor de Capacitor: utilice la versión mayor del plugin que coincida con la versión mayor de Capacitor (por ejemplo, plugin v8 con Capacitor 8). La tabla de compatibilidad en el README del GitHub lista las versiones mantenidas.

¿Es @capgo/capacitor-native-navigation gratuito y de código abierto?

Sí. El código fuente de code está disponible en GitHub en https://github.com/Cap-go/capacitor-native-navigation/ y el paquete es gratuito para instalar desde npm. Se aceptan informes de errores y solicitudes de extracción.

¿Puedo actualizar code que utiliza la navegación nativa sin una revisión de la Tienda?

Instalar o actualizar el plugin cambia la code nativa, por lo que necesita una nueva compilación de la tienda. Después de eso, los cambios de JavaScript, HTML y CSS que llaman al plugin pueden enviar instantáneamente con Capgo actualizaciones en vivo.

Envíe cambios de Navegación Nativa sin esperar a la revisión de la aplicación

Una vez que el plugin esté en tu tienda de construcción, Capgo actualizaciones en vivo envían cambios en JavaScript, HTML y CSS a los usuarios en minutos.

Inicie con Capgo