Frozen-Burrito / hydrate-app

Repositorio para la app de apoyo de la botella hydrate, desarrollada con Flutter.
2 stars 0 forks source link

[BUG] La tarea de Workmanager para la aportación a datos abiertos falla con un `NoSuchMethodError` #50

Closed Frozen-Burrito closed 2 years ago

Frozen-Burrito commented 2 years ago

Descripción del Error Cuando WorkManager intenta ejecutar la tarea para realizar una contribución a datos abiertos, se produce un NoSuchMethodError. Esto significa que WorkManager no tiene acceso al método designado para manejar sus callbacks, BackgroundTasks.callbackDispatcher().

Cómo Reproducir Pasos para reproducir el error:

  1. Iniciar sesión con una cuenta de usuario válida.
  2. Activar la contribución a datos abiertos, en la vista de configuración.
  3. Asegurar que el dispositivo tiene conexión a internet.
  4. Esperar a que el task sea ejecutado por Workmanager.
  5. Ver el error, en consola y en la notificación de debug.

Comportamiento Esperado El módulo que interactúa con WorkManager debería poder especificar una función que maneja los callbacks y ejecuta las tareas en segundo plano.

Entorno

Contexto Adicional Probablemente la función usada para manejar callbacks debe ser de top level (no estática de una clase).

La excepción produce el siguiente output al ser producida en debug:

E/flutter (29114): [ERROR:flutter/shell/common/shell.cc(93)] Dart Unhandled Exception: NoSuchMethodError: No top-level getter 'callbackDispatcher' declared.
E/flutter (29114): Receiver: top-level
E/flutter (29114): Tried calling: callbackDispatcher, stack trace: #0      NoSuchMethodError._throwNew (dart:core-patch/errors_patch.dart:216:5)
E/flutter (29114):
E/flutter (29114): [ERROR:flutter/runtime/dart_isolate.cc(668)] Could not resolve main entrypoint function.
E/flutter (29114): [ERROR:flutter/runtime/dart_isolate.cc(167)] Could not run the run main Dart entrypoint.
E/flutter (29114): [ERROR:flutter/runtime/runtime_controller.cc(382)] Could not create root isolate.
E/flutter (29114): [ERROR:flutter/shell/common/shell.cc(600)] Could not launch engine with configuration.
Frozen-Burrito commented 2 years ago

El error inicial fue solucionado al asignar correctamente el taskName y uniqueName del work, además de convertir a callbackDispatcher() en una función de nivel superior. La task es ejecutada con la frecuencia esperada y la serialización de entidades a JSON funciona correctamente.

Sin embargo, hay un error en el servicio web que se produce al volver a persistir registros de hidratación y actividad que ya existían previamente.