__CAPGO_KEEP_0__ home
Indietro 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 di WebP animate

Opzioni di navigazione nativa, selezione di schede, icone SVG e opzioni di stile visualizzate come demos di WebP animate.

Risorse di origine
Demo di navigazione nativa animata che mostra il menu di navigazione nativa, le schede e il contenuto della WebView
Navegazione nativa
Demo di flusso di selezione di schede di navigazione nativa animato che mostra la selezione di schede, la transizione di push e il pulsante di ritorno nativo
Flusso di selezione di schede
Demo animato di icone SVG native che mostra icone SVG inline, tinte native, etichette e selezione di schede
Icone SVG
Demo di opzioni di navigazione native animate che mostrano colori dinamici, etichette selezionate, badge e transizioni di zoom
Opzioni di stile

Guida

Tutoriale sulla navigazione nativa

Testa sul dispositivo

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

anteprima del collegamento QR del plugin di navigazione nativa code

Usando @capgo/capacitor-native-navigation

@capgo/capacitor-native-navigation rende una navigazione nativa superiore, barra dei tasti inferiore e guscio di transizione della rotta su una sola schermata di visualizzazione completa Capacitor WebView. Il tuo framework web possiede ancora le rotte e il contenuto, mentre il nativo possiede la finestra dell'applicazione.

Installa e sincronizza

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

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

Visualizza una barra dei tasti 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

Le barre native emettono un'intenzione. Il tuo router esegue ancora 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

Usa un trasporto di transizione intorno all'aggiornamento normale della rotta 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

Usa gli aiuti di zoom per le rotte che si aprono da un card, 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 iconici sono descrizioni native, non nodi React o Vue. Usa 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' },
};

L'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, insetti di area sicura e eventi di intent nativi. 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

Avvia 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 le barre web duplicate:

<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 le spinte di pagina normali, e utilizza solo gli aiuti di zoom della navigazione nativa per le rotte con elementi condivisi o zoom.

Riferimento completo

Continua da Usando @capgo/capacitor-navigazione-nativa

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