Allez directement au contenu principal
@capgo/capacitor-kit-de-widgets UI & Système Ouvert source

Kit de widgets Capacitor kit de plugins

Créez des surfaces WidgetKit et d'activité Live à partir de Capacitor avec des cadres SVG, des temporisations, des zones d'action ou une synchronisation complète de l'état du widget natif.

Installer

bun add @capgo/capacitor-widget-kit bunx cap sync
npm, pnpm ou yarn
  • npm install @capgo/capacitor-widget-kit
  • pnpm add @capgo/capacitor-widget-kit
  • yarn add @capgo/capacitor-widget-kit

Demo

Démonstrations du Kit de widgets

Kit de widgets et contrôles d'activité Live affichés sous forme de démo animée WebP.

Actifs source
Démonstration animée de Kit de widgets montrant l'état du widget de modèl’et les contrôles dérivés de Capacitor
Flux de modèle de widget

Guide

Comment utiliser Kit de widgets dans Capacitor

En utilisant @capgo/capacitor-widget-kit

@capgo/capacitor-widget-kit Permet à une application Capacitor de piloter les expériences de WidgetKit et d'activité en direct de deux manières.

  • Afficher des modèles SVG résolus avec changement de cadre, zones de clic et temporisations pause/lecture.
  • Conservant le widget entièrement natif tandis que l'application et le widget partagent un état de session JSON et des messages asynchrones.

Installer

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

Quand utiliser des modèles SVG

Utilisez des modèles SVG lorsque la surface du widget peut être décrite en SVG. L'application stocke une définition de modèle, le pont natif résout les placeholders et les appuis sur le widget peuvent muter l'état ultérieurement.

Les bonnes correspondances incluent les chronomètres d'entraînement, les cartes de statut de livraison, les scores de sports ou tout UI compact où le passage entre les cadres nommés est suffisant.

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

Gérer les actions du widget dans l'application.

Les actions du widget sont persistées sous forme d'événements. Lisez et reconnaissiez-les lorsque l'application reprend ou après une étape de synchronisation de fond.

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

Quand Utiliser les Sessions Pleinement Natives

Use full-native sessions when the widget UI is better built directly in Swift, Kotlin, or Java. Capacitor still starts and stops the session, keeps shared state current, and queues work between app and 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 },
});

Queue Async Work Between Widget And App

Les messages peuvent circuler entre l'application et le widget ou vice versa. Ils restent en attente jusqu'à être confirmés et traités.

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

Si l'opération faille, complétez le message avec une erreur :

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

Remarques de configuration native.

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

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

Remarques de configuration native

Configurez un groupe d'application pour iOS WidgetKit et les activités en direct en le définissant sur les cibles de l'application et de l'extension de widget. CapgoWidgetKitAppGroup à la fois Info.plist Les boutons interactifs nécessitent une extension de widget qui relie le pont natif fourni par le plugin et l'intention d'action.

Référence complète

Continuez à partir de l'utilisation de @capgo/capacitor-kit-de-widget

Si vous utilisez L'utilisation de @capgo/capacitor-kit-de-widget pour planifier le travail de plugin natif, connectez-l’avec @capgo/capacitor-kit-de-widget pour les détails d'implémentation dans @capgo/capacitor-kit-de-widget Getting Started pour les détails d'implémentation dans Démarrage Répertoire du Plugin Capgo pour le flux de travail du produit dans Répertoire du Plugin Capgo Capacitor Plugins par Capgo pour les détails d'implémentation dans Capacitor Plugins par Capgo, et Ajouter ou Mettre à Jour les Plugins pour les détails d'implémentation dans Ajouter ou Mettre à Jour les Plugins.

FAQ

FAQ du Kit de widgets

Comment puis-je installer le kit de widgets dans une application Capacitor ?

Run &quot;bun add @capgo/capacitor-widget-kit&quot; (or &quot;npm install @capgo/capacitor-widget-kit&quot;), then run &quot;bunx cap sync&quot; so the iOS and Android projects pick up the native code. Import it from &quot;@capgo/capacitor-widget-kit&quot; in your app code.

Fonctionne-t-il avec React, Vue et Angular @capgo/capacitor-widget-kit ?

Oui. Le Kit de widgets est un paquet Capacitor, il fonctionne donc avec tout framework web qui tourne à l'intérieur Capacitor, y compris Ionic, React, Vue, Angular, Svelte et JavaScript pur.

Quelle version Capacitor est prise en charge par @capgo/capacitor-widget-kit ?

Les plugins Capgo suivent la version majeure de Capacitor : utilisez la version majeure du plugin qui correspond à votre version majeure de Capacitor (par exemple, plugin v8 avec Capacitor 8). La table de compatibilité dans le README du GitHub liste les versions maintenues.

Est-ce que @capgo/capacitor-widget-kit est gratuit et open source ?

Oui. Le code source code est public sur GitHub à https://github.com/Cap-go/capacitor-widget-kit/ et le paquet est gratuit pour l'installer depuis npm. Les rapports de bugs et les demandes de mise à jour sont les bienvenus.

Puis-je mettre à jour code qui utilise le Kit de widgets sans passer par une revue de l'App Store ?

L'installation ou la mise à jour du plugin change la version native code, elle nécessite donc une nouvelle construction de l'application. Une fois cela fait, les modifications JavaScript, HTML et CSS qui appellent le plugin peuvent être déployées instantanément avec les mises à jour Capgo.

Ship Widget Kit changes without waiting for app review

Once the plugin is in your store build, Capgo live updates push your JavaScript, HTML and CSS changes to users in minutes.

Commencez avec Capgo