Passer au contenu principal
Retour aux plugins
@capgo/capacitor-kit-de-widgets
Tutoriel
@capgo/capacitor-kit-de-widgets

Kit de widgets

Construire des surfaces de WidgetKit et d'activités en direct à partir de Capacitor avec des cadres SVG, des temporisations, des zones d'action ou une synchronisation complète de l'état du widget natif

Démonstration

Démonstrations animées WebP

Contrôles de modèles de WidgetKit et d'activité en direct affichés sous forme de démonstration animée WebP.

Atouts source
Démonstration animée de WidgetKit montrant l'état du widget de modèl’et les contrôles pilotés à partir de Capacitor
Flux de modèle de Widget

Guide

Tutoriel sur le Kit de Widget

Tester sur appareil

Téléchargez l'application Capgo, puis scannez le QR code.

Le lien QR du kit de widgets code

En utilisant @capgo/capacitor-kit-de-widgets

@capgo/capacitor-widget-kit permet à une application Capacitor de faire fonctionner les expériences WidgetKit et d'activité en direct de deux manières :

  • Rendre les surfaces de modèle SVG résolu avec le changement de cadre, les zones de clic chaud et les compteurs d'arrêt/jeu.
  • Conservez le widget entièrement natif tout en partageant l'état de session JSON et les messages asynchrones entre l'application et le widget.

Installer

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

When Utiliser les Modèles SVG

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

Les bonnes correspondances incluent les compteurs d'entraînement, les cartes d'état 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 });

When Utiliser les Sessions à Part entière

Utilisez les sessions à part entière lorsque l'UI du widget est mieux construit directement en Swift, Kotlin ou Java. Capacitor commence et arrête toujours la session, garde l'état partagé actuel, et file le travail entre l'application et le 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 },
});

Filez le Travail Asynchrone entre le Widget et l'Application

Les messages peuvent circuler de l'application au widget ou du widget à l'application. Ils restent en attente jusqu'à ce qu'ils soient reconnus et terminé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 },
});

S'il échoue, terminez le message avec une erreur:

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

Arrêtez les Sessions de Manière Propre

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

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

Notes de Configuration du Pont Natif

Pour iOS WidgetKit et Activités en direct, configurez un groupe d'application sur les cibles de l'application et de l'extension de widget, et définissez CapgoWidgetKitAppGroup dans les deux Info.plist fichiers. 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 widgets, Prise en main pour les détails d'implémentation dans Prise en main, Répertoire de plugins Capgo pour le flux de travail du produit dans Répertoire de plugins Capgo, Plugins Capacitor par Capgo pour les détails d'implémentation dans Plugins Capacitor par Capgo, et Ajouter ou mettre à jour des plugins pour les détails d'implémentation dans Ajouter ou mettre à jour des plugins.