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

Navigazione nativa

Rendere i barre di navigazione, le barre dei tab e le conchiglie di transizione su una schermata completa di Capacitor WebView

Demo

Demos WebP animati

Opzioni di navigazione nativa, selezione di schede, 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 WebView
Shell nativa
Demo di flusso di selezione di schede, transizione di push e back nativo
Flusso di selezione
Demo animato di icone SVG native che mostra icone SVG inline, tinte native, etichette e selezione di schede
Icône SVG
Demo animato di opzioni di navigazione native che mostra colori dinamici, etichette selezionate, badge e transizioni di zoom
Opzioni di stile

Guida

Tutorial sulla navigazione nativa

Testare su dispositivo

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

Link QR preview del plugin di navigazione nativa code

Utilizza @capgo/capacitor-native-navigation

@capgo/capacitor-native-navigation Rende la navigazione nativa in alto, la barra dei tab in basso, le conchiglie di transizione delle route e una singola finestra di visualizzazione completa Capacitor tramite un WebView. Il tuo framework web gestisce ancora le route e il contenuto, mentre il nativo gestisce la finestra dell'applicazione.

Installare e sincronizzare

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

Configura la finestra nativa

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

Collega 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'operazione di transizione intorno all'aggiornamento normale 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,
  });
}

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

L'inline SVG supporta path, line, polyline, polygon, circle, e rect, che copre i set di icone comuni come Lucide e Feather.

Combina con @capgo/capacitor-transizioni

Utilizza la navigazione nativa per la barra di navigazione nativa, la barra dei tab, gli insetti di area sicura e gli eventi di intent nativi. Utilizza @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',
});

Tieni la transizione di uscita focalizzata sulle pagine, non duplicare 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 con elementi condivisi o di zoom.

Riferimento completo

Continua da Utilizza @capgo/capacitor-navigazione-nativa

If sei stai utilizzando Utilizzando @capgo/capacitor-native-navigation per pianificare il comportamento dei media e dell'interfaccia nativi, collegalo 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 Utilizzo di @capgo/capacitor-video-player.