Ke Halaman Utama
@capgo/capacitor-native-navigation UI & Sistem Terbuka sumber

Navigasi Native plugin Capacitor

Render navigasi native, tabbar, dan shell transisi penuh di atas WebView penuh Capacitor

Pasang

bun add @capgo/capacitor-native-navigation bunx cap sync
npm, pnpm atau yarn
  • npm install @capgo/capacitor-native-navigation
  • pnpm add @capgo/capacitor-native-navigation
  • yarn add @capgo/capacitor-native-navigation

Demo

Demo navigasi native

Demos navigasi native menampilkan opsi chrome, pilihan tab, ikon SVG, dan gaya yang dapat dirender sebagai animasi WebP.

Sumber aset
Demo shell navigasi native yang beranimasi menampilkan navbar native, tab, dan konten WebView
Shell native
Aliran navigasi native animasi menampilkan pilihan tab, transisi push, dan tombol kembali native
Aliran sentuh
Demo ikon SVG native animasi menampilkan ikon SVG inline, tinta native, label, dan pilihan tab
Ikon SVG
Demo pilihan navigasi native animasi menampilkan warna dinamis, label terpilih, badge, dan transisi zoom
Pilihan gaya

Petunjuk

Bagaimana menggunakan Navigasi Native di Capacitor

Uji coba di perangkat

Unduh aplikasi Capgo, kemudian scan kode QR code.

Tautan QR Pratinjau Plugin Navigasi Asli code

Menggunakan @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.

Instal dan sinkronkan

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

Konfigurasi kerangka asli

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

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

Mengrender navbar asli

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

Mengrender tabbar asli

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

Menghubungkan acara asli ke router Anda

Bar-bar asli mengeluarkan niat. Router Anda masih melakukan perubahan rute:

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

Perubahan rute animasi

Gunakan transaksi transisi sekitar pembaruan rute web normal Anda:

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

Tambahkan transisi zoom

Gunakan bantuan zoom untuk rute yang dibuka dari kartu, item grid, atau pratinjau 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,
  });
}

Padankan konten dengan insets native

Ketika contentInsetMode adalah css, plugin menulis variabel CSS untuk bar-bar native:

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

Pilihan ikon

Ikon adalah deskriptor native, bukan node React atau Vue. Gunakan SVG ketika Anda tidak ingin mengemas aset native:

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 mendukung path, line, polyline, polygon, circle, dan rectyang mencakup ikon set umum seperti Lucide dan Feather.

Combine dengan @capgo/capacitor-transisi

Pakai Native Navigation untuk navbar native, tabbar, insets area aman, dan event intent native. Pakai @capgo/capacitor-transitions untuk stack halaman WebView di bawah chrome native tersebut.

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

Awali kedua paket sekali:

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

Tahan outlet transisi fokus pada halaman, bukan duplikat bar 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>

Gerakkan kedua paket dari aksi router yang sama:

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

Pilih satu layer animasi per perubahan rute. Biarkan @capgo/capacitor-transitions animasi push halaman normal, dan gunakan bantuan zoom Native Navigation hanya untuk rute yang bersama atau zoom.

Referensi Lengkap

Teruskan dari Menggunakan @capgo/capacitor-native-navigation

Jika Anda menggunakan Menggunakan @capgo/capacitor-native-navigation Untuk merencanakan perilaku media dan antarmuka native, hubungkannya dengan @capgo/capacitor-native-navigation untuk detail implementasi di @capgo/capacitor-native-navigation, Mulai Menggunakan untuk detail implementasi di Getting Started, Menggunakan @capgo/capacitor-live-activities untuk kemampuan native di Menggunakan @capgo/capacitor-live-activities, @capgo/capacitor-aktivitas-nyata untuk detail implementasi di @capgo/capacitor-aktifitas-hidup, dan Menggunakan @capgo/capacitor-pemain-video untuk kemampuan asli di Menggunakan @capgo/capacitor-pemain-video.

FAQ

Pertanyaan Umum Native Navigation

Bagaimana cara saya menginstal plugin Native Navigation di aplikasi Capacitor?

Jalankan &quot;bun add @capgo/capacitor-native-navigation&quot; (atau &quot;npm install @capgo/capacitor-native-navigation&quot;), kemudian jalankan &quot;bunx cap sync&quot; agar proyek iOS dan Android dapat menangkap code native. Import dari &quot;@capgo/capacitor-native-navigation&quot; di aplikasi code.

Apakah @capgo/capacitor-native-navigation dapat berjalan dengan React, Vue, dan Angular?

Ya. Native Navigation adalah paket Capacitor, sehingga dapat berjalan dengan framework web apa pun yang berjalan di dalam Capacitor, termasuk Ionic, React, Vue, Angular, Svelte, dan JavaScript biasa.

Mana Capacitor versi yang didukung oleh @capgo/capacitor-native-navigation?

Capgo plugin mengikuti versi utama Capacitor: gunakan versi utama plugin yang sesuai dengan versi utama Capacitor (misalnya plugin v8 dengan Capacitor 8). Tabel kompatibilitas di README GitHub menampilkan versi yang masih dipelihara.

Apakah @capgo/capacitor-native-navigation gratis dan terbuka sumber?

Iya. Sumber code yang terbuka di GitHub di https://github.com/Cap-go/capacitor-native-navigation/ dan paketnya gratis untuk diinstal dari npm. Laporan bug dan permintaan pull diterima.

Bisa saya memperbarui code yang menggunakan Native Navigation tanpa review App Store?

Pemasangan atau pengupgrade plugin mengubah native code, sehingga memerlukan build toko baru. Setelah itu, perubahan JavaScript, HTML, dan CSS yang memanggil plugin dapat berlayar segera dengan Capgo live updates.

Kirimkan perubahan Navigasi Asli tanpa menunggu tinjauan aplikasi

Saat plugin sudah ada di toko aplikasi Anda, Capgo pembaruan hidup memperbarui perubahan JavaScript, HTML, dan CSS Anda ke pengguna dalam menit.

Mulai dengan Capgo