Saltare al contenuto principale
Torna ai plugin
@capgo/capacitor-navigazione nativa
Tutorial
@capgo/capacitor-navigazione-nativa

Navigazione nativa

Rendere barre di navigazione, tabbar e gusci di transizione a schermo intero su un Capacitor WebView

Demo

Demonstrazioni animate WebP

Navegazione nativa Chrome, selezione schede, icone SVG e opzioni di stile visualizzate come demo animate WebP.

Risorse di origine
Demo di navigazione nativa animata che mostra il menu di navigazione, le schede e il contenuto della WebView
Navegazione nativa
Demo di flusso di tap animato che mostra la selezione delle schede, la transizione di spinta e il back nativo
Flusso di tap
Demo di icone SVG animate che mostra icone SVG inline, tint nativo, etichette e selezione delle schede
Icne SVG
Demo di opzioni di navigazione nativa animate che mostrano colori dinamici, etichette selezionate, badge e transizioni di zoom
Opzioni di stile

Guida

Tutorial sulla navigazione nativa

Testa sul dispositivo

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

Il codice QR di anteprima del plugin di navigazione nativa code

Utilizzando @capgo/capacitor-navigazione-nativa

@capgo/capacitor-native-navigation rende la navigazione superiore nativa, la barra dei pulsanti inferiore e le conchiglie 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'app.

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 un navbar nativo

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 un tabbar nativo

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

Utilizza una transazione di transizione intorno all'aggiornamento della tua 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

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

Aggiungi un contenuto con gli insetti nativi

Quando contentInsetMode E' il plugin che scrive le variabili CSS per le barre native: cssIl menu delle icone

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

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

L'SVG inline supporta

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

, e path, line, polyline, polygon, circle, che copre i set di icone comuni come Lucide e Feather. rectCombina con @__CAPGO_KEEP_0__/__CAPGO_KEEP_1__-transizioni

Combine with @capgo/capacitor-transitions

per la pila di pagine del WebView sotto quella cromia nativa. @capgo/capacitor-transitions Inizializza entrambi i pacchetti una volta sola:

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

Conserva l'uscita di transizione focalizzata sulle pagine, non le barre web duplicate:

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

Icon choices

<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 sia i pacchetti da azioni del 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 gli aiuti di zoom di Native Navigation solo per le route con elementi condivisi o zoom.

Riferimento Completo

Continua a procedere da Utilizzare @capgo/capacitor-navigazione-nativa

Se stai utilizzando Utilizzare @capgo/capacitor-navigazione-nativa per pianificare il comportamento di media e interfaccia nativa, connettilo con @capgo/capacitor-navigazione-nativa per i dettagli di implementazione in @capgo/capacitor-navigazione nativa, Inizio per i dettagli di implementazione in Inizio, Utilizzo di @capgo/capacitor-attività in tempo reale per la capacità nativa in Utilizzo di @capgo/capacitor-attività in tempo reale, @capgo/capacitor-attività in tempo reale per i dettagli di implementazione in @capgo/capacitor-attività in tempo reale, e Utilizzo di @capgo/capacitor-lettore di video per la capacità nativa in Utilizzo di @capgo/capacitor-lettore di video.