Saltar al contenido principal
Volver a plugins
@capgo/capacitor-kit-de-widgetes
Tutoría
@capgo/capacitor-kit-de-widgetes

Kit de Widgetes

Crea superficies de WidgetKit y Actividad en vivo desde Capacitor con marcos SVG, temporizadores, puntos de acción o sincronización de estado de widget nativo completo

Demostración

Demos animados de WebP

Controles de WidgetKit y Actividad en vivo mostrados como demostración animada de WebP.

Recursos de origen
Demostración animada de WidgetKit que muestra el estado y los controles del widget de plantilla impulsados por Capacitor
Flujo de plantilla de widget

Guía

Tutoriales sobre Widget Kit

Probar en dispositivo

Descargue la aplicación Capgo, luego escane la cámara QR code.

Vista previa del plugin Widget Kit QR code

Usando @capgo/capacitor-widget-kit

@capgo/capacitor-widget-kit permite que una aplicación Capacitor impulse experiencias de WidgetKit y Actividad en vivo de dos maneras:

  • Renderiza superficies de plantillas SVG resueltas con cambios de marco, puntos de clic y temporizadores de pausa/reproducción.
  • Mantenga el widget completamente nativo mientras la aplicación y el widget comparten un estado de sesión JSON y mensajes asíncronos.

Instale

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

When to Use SVG Templates

Utiliza plantillas SVG cuando la superficie del widget puede describirse como SVG. La aplicación almacena una definición de plantilla, el puente nativo resuelve los lugares en blanco y los toques del widget pueden mutar el estado más tarde.

Los ajustes adecuados incluyen temporizadores de entrenamiento, tarjetas de estado de entrega, marcadores de puntuación deportiva, o cualquier interfaz de usuario compacta donde cambiar entre marcos nombrados es suficiente.

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

Gestionar Acciones de Widget en la Aplicación

Las acciones de widget se persisten como eventos. Lee y reconócelas cuando la aplicación se reanude o después de un paso de sincronización de fondo.

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 to Use Full-Native Sessions

Utiliza sesiones full-nativas cuando la interfaz de usuario del widget se construye mejor directamente en Swift, Kotlin o Java. Capacitor aún inicia y detiene la sesión, mantiene el estado compartido actualizado y programa el trabajo entre la aplicación y el 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 },
});

Cola Trabajo Asíncrono entre Widget y Aplicación

Los mensajes pueden fluir de la aplicación al widget o del widget a la aplicación. Quedan pendientes hasta que se reconocen y se completan.

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 el trabajo falla, completa el mensaje con un error:

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

Cerrar Sesiones de Manera Limpia

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

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

Notas de Configuración Nativa

For iOS WidgetKit y Actividades en vivo, configure un grupo de aplicación en los objetivos de la aplicación y la extensión de widget, y establezca CapgoWidgetKitAppGroup en ambos Info.plist archivos. Los botones interactivos requieren una extensión de widget que conecte la puente nativa proporcionada por el plugin y la intención de acción.

Referencia completa

Sigue adelante desde Usando @capgo/capacitor-widget-kit

Si estás utilizando Usando @capgo/capacitor-widget-kit para planificar el trabajo de plugin nativo, conecta con @capgo/capacitor-widget-kit para el detalle de implementación en @capgo/capacitor-kit-de-widget Inicio para el detalle de implementación en Inicio Capgo Directorio de Plugins para el flujo de trabajo del producto en Capgo Directorio de Plugins Capacitor Plugins por Capgo para el detalle de implementación en Capacitor Plugins por Capgo Agregar o Actualizar Plugins para el detalle de implementación en Agregar o Actualizar Plugins