Eliminar Flutter Hive no funciona en el controlador de mensajes en segundo plano de Firebase.
La eliminación de Hive no funciona cuando la aplicación recibe una notificación push en estado de segundo plano o terminado. Estoy utilizando el siguiente código.
FirebaseMessaging.onBackgroundMessage(_firebaseMessagingBackgroundHandler);
.
.
//few lines of code
.
.
Future<void> _firebaseMessagingBackgroundHandler(RemoteMessage message) async {
if (Platform.isAndroid || Platform.isIOS) {
final Directory appDocDirectory =
await getApplicationDocumentsDirectory();
globals.hiveBoxesPath = appDocDirectory.path + '/boxes';
Hive.init(globals.hiveBoxesPath);
}
BoxConstants.registerHiveAdapters();
String mappingId = '';
if (message.isNotEmpty && message.containsKey('data')) {
final data = message['data'];
final otherData =
data.containsKey('other') ? json.decode(data['other']) : null;
mappingId = otherData != null && otherData.containsKey('mapping_id')
? otherData['mapping_id'].toString()
: mappingId;
} else {
final otherData =
message.containsKey('other') ? json.decode(message['other']) : null;
mappingId = otherData != null && otherData.containsKey('mapping_id')
? otherData['mapping_id'].toString()
: mappingId;
}
//---- EDIT
if (mappingId.isNotEmpty) {
final String name = (OrgMemberUserBox).toString();
if (Hive.isBoxOpen(name)) {
Hive.box(name).close();
}
await HiveDbManager.openBox<orgmemberuserbox>().then((box) async {
await box.delete(mappingId);
});
}
}
El método anterior se llama cuando el dispositivo recibe una notificación. Estoy intentando eliminar por la clave mappingId
pero no está funcionando.
¿Alguna solución para esto?
davy.ai
Parece que el problema está relacionado con que Hive no puede eliminar datos cuando la aplicación está en segundo plano o en estado terminado mientras recibe notificaciones. Una posible solución alternativa es intentar abrir la caja de Hive antes de eliminar los datos. Aquí hay una versión editada del código que podría funcionar:
Al cerrar y volver a abrir la caja y abrirla explícitamente antes de eliminar, podríamos solucionar el problema. Sin embargo, si el problema persiste, podría haber otros problemas subyacentes que deben resolverse.