Rumah __CAPGO_KEEP_0__
Kembali ke plugin
@capgo/capacitor-kit-widget
Tutorial
@capgo/capacitor-kit-widget

Kit Widget

Membangun permukaan WidgetKit dan Aktivitas Hidup dari Capacitor dengan kerangka SVG, timer, hotspot aksi, atau sinkronisasi keadaan widget penuh-native

Demo

Demo WebP Animasi

Kontrol Template WidgetKit dan Aktivitas Langsung ditampilkan sebagai demo WebP animasi.

Sumber Aset
Demo WidgetKit Animasi menampilkan template widget dan kontrol yang dikendalikan dari Capacitor
Alur Template Widget

Panduan

Petunjuk Pada Kit Aplikasi Widget

Uji Coba di Perangkat

Unduh aplikasi Capgo terlebih dahulu, kemudian scan kode QR code.

Tautan QR Pratinjau code Plugin Kit Aplikasi Widget

Menggunakan @capgo/capacitor-widget-kit

@capgo/capacitor-widget-kit Memungkinkan aplikasi Capacitor menggerakkan pengalaman WidgetKit dan Aktivitas Hidup dalam dua cara:

  • Mengrenderkan permukaan template SVG yang terpecahkan dengan mengubah frame, hotspot sentuh, dan timer pause/play.
  • Jaga widget sepenuhnya asli sementara aplikasi dan widget berbagi JSON session state dan pesan async.

Install

bun add @capgo/capacitor-widget-kit
bunx cap sync

Menggunakan Template SVG

Pilih menggunakan template SVG ketika permukaan widget dapat dijelaskan sebagai SVG. Aplikasi menyimpan definisi template, jembatan native memecahkan tempat pengganti, dan sentuhan widget dapat mengubah state kemudian.

Contoh yang cocok termasuk timer olahraga, kartu status pengiriman, skor olahraga, atau antarmuka UI kompak mana pun di mana beralih antara frame bernama cukup.

import { CapgoWidgetKit } from '@capgo/capacitor-widget-kit';

const { activity } = await CapgoWidgetKit.startTemplateActivity({
  activityId: 'session-1',
  state: {
    title: 'Chest Day',
    frame: 'summary',
    restDurationMs: 90000,
  },
  definition: {
    id: 'workout-card',
    timers: [{ id: 'rest', durationPath: 'state.restDurationMs' }],
    actions: [
      {
        id: 'next-frame',
        frameMutations: [{ op: 'next', path: 'frame', surface: 'lockScreen' }],
      },
      {
        id: 'toggle-rest',
        timerMutations: [{ op: 'toggle', timerId: 'rest' }],
      },
    ],
    layouts: {
      lockScreen: {
        width: 100,
        height: 40,
        frameIdPath: 'state.frame',
        frames: [
          {
            id: 'summary',
            hotspots: [{ id: 'switch', actionId: 'next-frame', x: 0, y: 0, width: 100, height: 40 }],
            svg: `<svg viewBox="0 0 100 40"><text x="6" y="22">{{state.title}}</text></svg>`,
          },
          {
            id: 'timer',
            hotspots: [{ id: 'pause-play', actionId: 'toggle-rest', x: 0, y: 0, width: 100, height: 40 }],
            svg: `<svg viewBox="0 0 100 40"><text x="6" y="22">{{timers.rest.remainingText}}</text></svg>`,
          },
        ],
      },
    },
  },
});

Proseskan Aksi Widget di Aplikasi

Aksi widget disimpan sebagai event. Baca dan akui mereka ketika aplikasi kembali atau setelah langkah sinkronisasi latar belakang.

const { events } = await CapgoWidgetKit.listTemplateEvents({
  activityId: activity.activityId,
  unacknowledgedOnly: true,
});

for (const event of events) {
  console.log(event.actionId, event.state, event.timers);
}

await CapgoWidgetKit.acknowledgeTemplateEvents({ activityId: activity.activityId });

Menggunakan Session Penuh-Native

Pilih menggunakan session penuh-native ketika UI widget lebih baik dibangun secara langsung di Swift, Kotlin, atau Java. Capacitor masih memulai dan menghentikan session, menjaga state bersama terkini, dan mengantre kerja antara aplikasi dan widget code.

const { session } = await CapgoWidgetKit.startWidgetSession({
  widgetId: 'native-session-1',
  kind: 'workout-controls',
  state: { isRunning: true, selectedSetId: 'set-1' },
  metadata: { accent: '#00d69c' },
});

await CapgoWidgetKit.updateWidgetSession({
  widgetId: session.widgetId,
  merge: true,
  state: { isRunning: false },
});

Antar Kerja Async Antara Widget dan Aplikasi

Pesan dapat mengalir dari aplikasi ke widget atau widget ke aplikasi. Mereka tetap menunggu sampai diakui dan diselesaikan.

const { message } = await CapgoWidgetKit.sendWidgetMessage({
  widgetId: session.widgetId,
  direction: 'widgetToApp',
  name: 'syncWorkoutSet',
  payload: { setId: 'set-1' },
  expectsResponse: true,
});

await CapgoWidgetKit.acknowledgeWidgetMessages({ messageIds: [message.messageId] });

await CapgoWidgetKit.completeWidgetMessage({
  messageId: message.messageId,
  response: { synced: true },
});

Jika pekerjaan gagal, lengkapi pesan dengan kesalahan:

await CapgoWidgetKit.completeWidgetMessage({
  messageId: message.messageId,
  error: 'Sync failed',
});

Berhenti Sesi dengan Baik

await CapgoWidgetKit.endTemplateActivity({
  activityId: activity.activityId,
  state: { title: 'Workout complete', frame: 'summary' },
});

await CapgoWidgetKit.stopWidgetSession({
  widgetId: session.widgetId,
  state: { isRunning: false },
});

Catatan Pengaturan Asli

Untuk WidgetKit iOS dan Aktivitas Hidup, konfigurasi sebuah Kelompok Aplikasi pada target aplikasi dan ekstensi widget, dan atur CapgoWidgetKitAppGroup di kedua Info.plist file. Tombol interaktif memerlukan ekstensi widget yang menghubungkan jembatan native plugin dan intent aksi.

Referensi Lengkap

Teruskan dari Menggunakan @capgo/capacitor-widget-kit

Jika Anda menggunakan Menggunakan @capgo/capacitor-widget-kit untuk merencanakan pekerjaan plugin native, hubungkannya dengan @capgo/capacitor-widget-kit untuk detail implementasi di @capgo/capacitor-widget-kit, Mulai untuk detail implementasi di Mulai, Daftar Plugin Capgo untuk alur kerja produk di Daftar Plugin Capgo, Plugin Capacitor oleh Capgo untuk detail implementasi di Plugin Capacitor oleh Capgo, dan Menambahkan atau Mengupdate Plugin untuk detail implementasi di Menambahkan atau Mengupdate Plugin.