__CAPGO_KEEP_0__ home
Indietro ai plugin
@capgo/capacitor-navigazione nativa
Tutorial
@capgo/capacitor-navigazione nativa

Navigazione nativa

Rendere barre di navigazione, barre dei tab e gusci di transizione a schermo intero su una Capacitor WebView

Demo

Demos WebP animati

Opzioni di navigazione nativa, selezione della scheda, icone SVG e opzioni di stile visualizzate come demos WebP animati.

Assetti di origine
Demo di shell nativa animata che mostra il navbar nativo, le schede e il contenuto della WebView
Shell nativa
Demo di flusso di selezione della scheda di navigazione nativa animata che mostra la selezione della scheda, la transizione di spinta e il back nativo
Flusso di selezione della scheda
Demo animato di icone SVG native mostrando icone SVG inline, tinte native, etichette e selezione di schede
Icône SVG
Demo di opzioni di navigazione native animate mostrando colori dinamici, etichette selezionate, badge e transizioni di zoom
Opzioni di stile

Guida

Tutorial sulla navigazione nativa

Testare sul dispositivo

Scarica l'app Capgo, poi scansa il QR code.

Previsualizzazione del collegamento QR del plugin di navigazione nativa code

Utilizza @capgo/capacitor-native-navigation

@capgo/capacitor-native-navigation renders native top navigation, bottom tab chrome, and route transition shells over a single full-screen Capacitor WebView. Your web framework still owns routes and content, while native owns the app frame.

Installa e sincronizza

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

Configura il frame nativo

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

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

Rendi una barra di navigazione 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>',
      },
    },
  ],
});

Rendi una barra dei tab 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>',
      },
    },
  ],
});

Connetti gli eventi nativi al tuo router

Il barriera nativa emette un'intenzione. Il tuo router esegue ancora il cambio di route:

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

Anima i cambiamenti di route

Utilizza un trasporto di transazione intorno alla tua normale aggiornamento della route web:

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',
});

Aggiungi una transizione di zoom

Utilizza gli aiuti di zoom per le rotte che si aprono da una scheda, un elemento della griglia o una anteprima dei media.

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

Pianifica il contenuto con gli insetti nativi

Quando contentInsetMode è css, il plugin scrive le variabili CSS per le barre native:

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

Scegliere un'icona

Gli icona sono descrizioni native, non nodi React o Vue. Utilizza SVG quando non vuoi bundle gli asset nativi:

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 inline supporta path, line, polyline, polygon, circle, e rect, che copre i set di icone comuni come Lucide e Feather.

Combina con @capgo/capacitor-transizioni

Usa la navigazione nativa per il navbar, tabbar, spazi di sicurezza e eventi di intent nativi. Usa @capgo/capacitor-transitions per la pila di pagine di WebView sottostante al chrome nativo.

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

Inizializza entrambi i pacchetti una volta sola:

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',
});

Conserva l'uscita di transizione focalizzata sulle pagine, non duplica le barre 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>

Guida entrambi i pacchetti dalle stesse azioni di 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}`);
});

Scegli un layer di animazione per ogni cambio di rotta. Lascia @capgo/capacitor-transitions animare le spinte di pagina normali, e utilizza solo gli aiuti di zoom della navigazione nativa per le rotte condivise o di zoom.

Riferimento completo

Continua da Usando @capgo/capacitor-navigazione-nativa

If stai utilizzando Utilizzando @capgo/capacitor-native-navigation per pianificare il comportamento dei media e dell'interfaccia nativi, connettilo con @capgo/capacitor-native-navigation per i dettagli di implementazione in @capgo/capacitor-native-navigation, Avvio per i dettagli di implementazione in Avvio, Utilizzando @capgo/capacitor-live-activities per la capacità nativa in Utilizzando @capgo/capacitor-live-activities, @capgo/capacitor-live-activities per i dettagli di implementazione in @capgo/capacitor-live-activities, e Utilizzando @capgo/capacitor-video-player per la capacità nativa in Utilizzare @capgo/capacitor-video-player.