Una aplicación no tiene etiqueta script, así que el equivalente es un paquete y una llamada; véase medir una aplicación para lo que eso te da. El paquete Flutter de Skomi no depende de nada más que de Flutter.

El código fuente, y una aplicación de demostración que se mide a sí misma, están en skomi-sdk-flutter.

Arráncalo una vez

void main() async {
  WidgetsFlutterBinding.ensureInitialized();

  await Skomi.start(SkomiOptions(appId: 'your-app-id'));

  runApp(const MyApp());
}

El identificador de la aplicación viene de My Apps en Skomi. No es un secreto y su sitio está en tu código fuente: identifica una aplicación en vez de autenticarla, igual que un identificador de sitio.

Nombra tus pantallas

// donde una pantalla se hace visible
Skomi.screen('checkout/review', props: {'tier': 'gold'});

No hay captura automática de nombres de ruta, y es deliberado: el nombre de una clase de widget es lo que tu código llama una pantalla, no lo que tú llamarías así en un informe. Hasta 20 propiedades por pantalla: cadenas, números, booleanos.

Dos cosas que Flutter no le puede decir

La versión de tu aplicación. Flutter no tiene ninguna API de framework para ella, así que pásasela:

final info = await PackageInfo.fromPlatform();   // package_info_plus

await Skomi.start(SkomiOptions(appId: '…', appVersion: info.version));

Déjala fuera y todas las pantallas informan sin versión, y el panel de versión de la aplicación lo dice entonces en vez de adivinar, lo que es honesto y no muy útil.

Dónde vive la cola sin conexión. Sin una ruta va al directorio temporal de la aplicación. Es privado de la aplicación y sobrevive a un reinicio, pero el sistema operativo puede reclamarlo si aprieta el almacenamiento; dale una ruta de documentos si perder una sesión en cola te importa.

Lo que obtienes sin pedirlo

Sesiones, pantallas, versiones de la aplicación, desgloses por plataforma, dispositivo y sistema operativo, y una tasa sin fallos. La cola sobrevive a estar sin conexión, a cerrar la aplicación y a un fallo, y cada pantalla lleva un identificador emitido una vez para que un lote reintentado se reconozca en vez de contarse dos veces.

Funciona en Android, iOS, macOS, Windows y Linux. Una compilación web compila y no recoge nada, a propósito: una aplicación Flutter web es un sitio, y un sitio recibe el script.

Errores - qué captura, y qué no puede

try {
  await checkout();
} catch (error, stack) {
  Skomi.captureError(error, stack: stack);
  showRetry();
}

start se encadena a FlutterError.onError y a PlatformDispatcher.instance.onError, así que lo que ya tuvieras instalado sigue funcionando. Captura los errores levantados dentro del framework de Flutter y los errores no gestionados del isolate raíz.

No es un informador de fallos y no debe usarse como tal. Un fallo nativo (un segfault en el C++ de un complemento, una parada por falta de memoria, una NSException de un canal de plataforma) mata el isolate que habría hecho el informe. Guarda Crashlytics, Sentry o el informe de la propia tienda para esos. Lo que añade Skomi es la mitad Dart, en la misma página que los errores que informas tú, y una tasa sin fallos que puedes leer junto a tus cifras de versión.

Los fallos se agrupan por tipo, nunca por mensaje: un mensaje lleva identificadores, rutas e importes, así que agrupar por él da una fila por ocurrencia y un informe que no dice nada.

Comprobar que funciona

Ejecuta la aplicación, muévete entre dos pantallas, y mira tu panel. Si no llega nada, las causas habituales son un identificador de aplicación de la aplicación equivocada y un start que nunca se esperó con await.