Frozen-Burrito / hydrate-app

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

[BUG] El procesamiento de eventos no se detiene cuando la app se desconecta del dispositivo #38

Closed Frozen-Burrito closed 2 years ago

Frozen-Burrito commented 2 years ago

Descripción del Error Cuando la app es desconectada de la extensión para botellas (usando el método disconnect() de flutter_blue), parece que sigue procesando eventos por un rato, invocando el método callback _onRecordAvailable. Después de algunos momentos, los eventos dejan de producirse y la app vuelve a su estado normal.

Cómo Reproducir Pasos para reproducir el error:

  1. Conectar la app con la extensión para botellas, a través de BLE.
  2. Recibir registros de hidratación.
  3. Desconectar la app de la extensión para botellas.
  4. Notar como se siguen procesando eventos del stream, lo que invoca _onRecordAvailable constantemente.

Comportamiento Esperado La app debería cancelar cualquier procesamiento de eventos para sincronizar registros de hidratación, cuando la extensión para botellas sea desconectada.

Entorno

Contexto Adicional Logs de la app:

I/FlutterBluePlugin(27267): [onCharacteristicRead] uuid: 00000fff-0000-1000-8000-00805f9b34fb status: 0
I/flutter (27267): Date char bytes: [33, 0, 0, 0, 0, 0, 0, 0]
D/FlutterBluePlugin(27267): mDevices size: 1
I/flutter (27267): remoteId: E0:E2:E6:9B:3B:C2 characteristicUuid: 0faf892f-0000-1000-8000-00805f9b34fb serviceUuid: 000019f5-0000-1000-8000-00805f9b34fb
D/FlutterBluePlugin(27267): [onCharacteristicRead] uuid: 0faf892f-0000-1000-8000-00805f9b34fb status: 0
I/flutter (27267): Handling change on pendingRecordsCount: [1]
I/flutter (27267): A punto de tomar _gattLock
I/ViewRootImpl@87b963[MainActivity](27267): ViewPostIme pointer 0
I/ViewRootImpl@87b963[MainActivity](27267): ViewPostIme pointer 1
I/flutter (27267): Disconnecting from device
D/BluetoothGatt(27267): cancelOpen() - device: E0:E2:E6:9B:3B:C2
D/BluetoothGatt(27267): onClientConnectionState() - status=0 clientIf=13 device=E0:E2:E6:9B:3B:C2
D/FlutterBluePlugin(27267): [onConnectionStateChange] status: 0 newState: 0
D/BluetoothGatt(27267): close()
D/BluetoothGatt(27267): unregisterApp() - mClientIf=13
I/flutter (27267): Device state changed BluetoothDeviceState.disconnected
I/flutter (27267): remoteId: E0:E2:E6:9B:3B:C2 characteristicUuid: 00002a19-0000-1000-8000-00805f9b34fb serviceUuid: 0000180f-0000-1000-8000-00805f9b34fb
I/flutter (27267): Error al leer el valor de una caracteristica del servicio de bateria (UUID = 00002a19-0000-1000-8000-00805f9b34fb): PlatformException(read_characteristic_error, no instance of BluetoothGatt, have you connected first?, null, null)
I/flutter (27267): Battery char bytes: []
I/flutter (27267): Synchronized data through BLE: {cantidad: 200, temperatura: -5.0, fecha: 1969-12-31 18:00:33.000}
I/flutter (27267): Not all required attributes could be obtained, expected 4
I/flutter (27267): _gattLock tomado
I/flutter (27267): remoteId: E0:E2:E6:9B:3B:C2 characteristicUuid: 0faf892c-0000-1000-8000-00805f9b34fb serviceUuid: 000019f5-0000-1000-8000-00805f9b34fb
I/flutter (27267): Error al leer el valor de una caracteristica del servicio de hidratacion (UUID = 0faf892c-0000-1000-8000-00805f9b34fb): PlatformException(read_characteristic_error, no instance of BluetoothGatt, have you connected first?, null, null)
I/flutter (27267): Ml char bytes: []
I/flutter (27267): remoteId: E0:E2:E6:9B:3B:C2 characteristicUuid: 00002a6e-0000-1000-8000-00805f9b34fb serviceUuid: 000019f5-0000-1000-8000-00805f9b34fb
I/flutter (27267): Error al leer el valor de una caracteristica del servicio de hidratacion (UUID = 00002a6e-0000-1000-8000-00805f9b34fb): PlatformException(read_characteristic_error, no instance of BluetoothGatt, have you connected first?, null, null)

(......)

I/flutter (27267): Error al leer el valor de una caracteristica del servicio de hidratacion (UUID = 0faf892f-0000-1000-8000-00805f9b34fb): PlatformException(read_characteristic_error, no instance of BluetoothGatt, have you connected first?, null, null)
I/flutter (27267): remoteId: E0:E2:E6:9B:3B:C2 characteristicUuid: 00002a19-0000-1000-8000-00805f9b34fb serviceUuid: 0000180f-0000-1000-8000-00805f9b34fb
I/flutter (27267): Error al leer el valor de una caracteristica del servicio de bateria (UUID = 00002a19-0000-1000-8000-00805f9b34fb): PlatformException(read_characteristic_error, no instance of BluetoothGatt, have you connected first?, null, null)
I/flutter (27267): Battery char bytes: []
I/flutter (27267): Synchronized data through BLE: {}
I/flutter (27267): Not all required attributes could be obtained, expected 4
I/ViewRootImpl@87b963[MainActivity](27267): ViewPostIme pointer 0
I/ViewRootImpl@87b963[MainActivity](27267): ViewPostIme pointer 1
D/FlutterBluePlugin(27267): mDevices size: 0
Frozen-Burrito commented 2 years ago

Con el commit más reciente, las subscripciones a eventos de nuevos registros de hidratación son suspendidas cuando la extensión para botellas de agua es desconectada. Sin embargo, en ciertas condiciones los registros de hidratación sincronizados son duplicados al ser obtenidos. Todavía queda pendiente resolver este problema.

Frozen-Burrito commented 2 years ago

Este problema quedó solucionado con las correcciones del 26 de septiembre de 2022, evitando que se crearan múltiples instancias de HydrateDevice para un mismo dispositivo BLE, con el mismo ID de dispositivo.