Guide
Tutoriel sur Kit de Widget
En utilisant @capgo/capacitor-kit-de-widget
@capgo/capacitor-widget-kit Permet à une application Capacitor de contrôler les expériences de 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 temporisateurs d'arrêt/jeu.
- Conserver 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
Quand utiliser les Modèles SVG
Utilisez les 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 marqueurs, et les clics du widget peuvent muter l'état ultérieurement.
Les bonnes affaires incluent les temporisateurs 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 les reconnaîtrez 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 Des Sessions Pleinement Natives
Utilisez des sessions pleinement natives lorsque l'interface utilisateur du widget est mieux construite directement en Swift, Kotlin ou Java. Capacitor démarre et arrête toujours la session, maintient l'état partagé à jour et file les tâches 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 confirmés 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 },
});
Si la tâche faille, complétez le message avec une erreur :
await CapgoWidgetKit.completeWidgetMessage({
messageId: message.messageId,
error: 'Sync failed',
});
Arrêtez Les Sessions De Façon 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 Native
Pour WidgetKit iOS et Activités En Direct, configurez un Groupe d'Application sur les cibles de l'application et de l'extension du 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
- GitHub: https://github.com/Cap-go/capacitor-widget-kit/
- Documentation : /docs/plugins/widget-kit/
Continuez à partir de l'utilisation de @capgo/capacitor-widget-kit
Si vous utilisez En utilisant @capgo/capacitor-widget-kit pour planifier le travail de plugin natif, connectez-le avec @capgo/capacitor-widget-kit pour les détails d'implémentation dans @capgo/capacitor-widget-kit, Prise en main pour les détails d'implémentation dans Prise en main, Répertoire du plugin Capgo pour le flux de travail du produit dans Répertoire du plugin Capgo Capacitor Plugins by Capgo for the implementation detail in Capacitor Plugins by Capgo, and Ajouter ou Mettre à Jour les Plugins pour les détails d'implémentation dans Ajouter ou Mettre à Jour les Plugins.