Vai al contenuto principale
@capgo/capacitor-native-navigation Sistema e interfaccia utente Sorgente aperta

Navigazione nativa Plugin Capacitor

Rendere barre di navigazione native, tabbar e gusci di transizione su una schermata completa di Capacitor WebView

Installare

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

Demo

Demos di navigazione nativa

Navigazione nativa chrome, selezione della scheda, icone SVG e opzioni di stile visualizzate come demo animate in WebP.

Assetti di origine
Esempio di shell di navigazione nativa animata che mostra un menu di navigazione, schede e contenuto di WebView
Shell nativo
Flusso di selezione di tab animato con transizione di push e back indietro nativo
Flusso di tap
Demo di icona SVG animata nativa che mostra icona SVG inline, tint nativo, etichette e selezione della scheda
Icone SVG
Opzioni di navigazione nativa animate demo che mostrano colori dinamici, etichette selezionate, badge e transizioni di zoom
Opzioni di styling

Guida

Come utilizzare la navigazione nativa in Capacitor

Testa sul dispositivo

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

Previsualizzazione del plugin di navigazione nativa code

Usando @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

Le barre native emettono l'intento. Il tuo router esegue comunque il cambio di rotta:

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 rotta

Utilizza un'operazione di transizione intorno all'aggiornamento della rotta web normale:

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

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

Possa 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 gli icona

Gli icona sono descrizioni native, non nodi React o Vue. Utilizza SVG quando non vuoi caricare 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, circlee, e rect, che copre set di icone comuni come Lucide e Feather.

Combina con @capgo/capacitor-transizioni

Usa la navigazione nativa per il navbar nativo, tabbar, spazi di area sicura e eventi di intento nativo. Usa @capgo/capacitor-transitions per la pila di pagine del 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 l'uscita di transizione 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 route. Lascia @capgo/capacitor-transitions animare spinte di pagina normali, e utilizzare solo gli aiuti di zoom di Native Navigation per percorsi con elementi condivisi o zoom.

Riferimento Completo

Continua con l'uso di @capgo/capacitor-navigazione-nativa

Se stai utilizzando Utilizza @capgo/capacitor-navigazione-nativa per pianificare il comportamento dei media e dell'interfaccia nativa, collega @capgo/capacitor-navigazione-nativa per i dettagli di implementazione in @capgo/capacitor-navigazione-nativa Getting Started per i dettagli di implementazione in Avvio Utilizza @capgo/capacitor-attività-in-vivo per la capacità nativa in Utilizza @capgo/capacitor-attività-in-vivo @capgo/capacitor-attività in diretta per i dettagli di implementazione in @capgo/capacitor-attività in diretta, e Utilizzo di @capgo/capacitor-video-player Per la capacità nativa in Utilizzo di @capgo/capacitor-video-player

FAQ

Domande frequenti sul plugin di navigazione nativa

Come posso installare il plugin di navigazione nativa in un'app Capacitor?

Esegui &quot;bun add @capgo/capacitor-native-navigation&quot; (o &quot;npm install @capgo/capacitor-native-navigation&quot;), quindi esegui &quot;bunx cap sync&quot; per far riconoscere agli progetti iOS e Android il codice nativo code. Importalo da &quot;@capgo/capacitor-native-navigation&quot; nella tua app code.

Funziona @capgo/capacitor-native-navigation con React, Vue e Angular?

Si. La navigazione nativa è un pacchetto Capacitor, quindi funziona con qualsiasi framework web che esegue all'interno di Capacitor, compresi Ionic, React, Vue, Angular, Svelte e JavaScript puro.

Qual è la versione Capacitor supportata da @capgo/capacitor-native-navigation?

Il plugin Capgo segue la versione maggiore di Capacitor: utilizza la versione maggiore del plugin che corrisponde alla tua versione maggiore di Capacitor (ad esempio plugin v8 con Capacitor 8). La tabella di compatibilità nella README del GitHub elenca le versioni mantenute.

È @capgo/capacitor-native-navigation gratuito e open source?

Sì. Il codice sorgente code è pubblico su GitHub all'indirizzo https://github.com/Cap-go/capacitor-native-navigation/ e il pacchetto è gratuito per l'installazione da npm. I rapporti di bug e le richieste di pull sono graditi.

Posso aggiornare code che utilizza la navigazione nativa senza una revisione dell'App Store?

L'installazione o l'aggiornamento del plugin modifica la code nativa, quindi richiede una nuova costruzione dello store. Dopo di che, le modifiche JavaScript, HTML e CSS che chiamano il plugin possono essere distribuite immediatamente con Capgo live updates.

Invia le modifiche di Native Navigation senza attendere la revisione dell'app

Una volta che il plugin è presente nella tua build di store, le Capgo aggiornamenti in tempo reale inviano le tue modifiche JavaScript, HTML e CSS agli utenti in pochi minuti.

Inizia con Capgo