saveMetodoMuestreo method
- Intentar subir a API primero; si falla, guardar local y en pendientes.
Si sube correctamente, guardar solo local.
Implementation
Future<void> saveMetodoMuestreo(
Map<String, dynamic> data,
BuildContext context,
) async {
final now = DateTime.now().toIso8601String();
final isUpdate = data.containsKey('id') && data['id'].toString().isNotEmpty;
// Si es nueva, le asignamos ID generado y created
if (!isUpdate) {
data['id'] = _generateId();
data['created'] = now;
}
data['updated'] = now;
// 2.a) Intento subir a la API primero (POST o PUT según corresponda)
final apiSuccess = await upload(data);
if (apiSuccess) {
// 2.b) API OK → guardo en tabla local sin marcar pendiente
try {
await _dbHelper.insertMetodoMuestreoEspecieBatch([data]);
debugPrint('✅ Muestreo guardado LOCALMENTE con ID=${data['id']}');
await _sendNotification('Muestreo sincronizado', 'Guardado en API');
_showMessage(context, 'Sincronizado con éxito');
} catch (e) {
debugPrint('❌ Error guardando local Muestreo: $e');
await _sendNotification('Error Local Muestreo', e.toString());
_showMessage(context, 'Error al guardar localmente');
}
} else {
// 2.c) API falló → guardo local y en pendientes
try {
await _dbHelper.insertMetodoMuestreoEspecieBatch([data]);
debugPrint('💾 Muestreo guardado LOCALMENTE con ID=${data['id']}');
} catch (e) {
debugPrint('❌ Error guardando local Muestreo (fallback): $e');
await _sendNotification('Error Local Muestreo', e.toString());
}
await _storePending(data);
_showMessage(context, 'Guardado offline hasta conexión');
}
}