upload method
- Sube data a la API: si viene con 'id' hace PUT a /{id}, si no hace POST.
Implementation
Future<bool> upload(Map<String, dynamic> data) async {
try {
final prefs = await SharedPreferences.getInstance();
final token = prefs.getString('token');
if (token == null) {
debugPrint('โ upload() โ Token NULO. No se puede enviar al API.');
return false;
}
final bool isUpdate =
data.containsKey('id') && data['id'].toString().isNotEmpty;
late Uri uri;
late http.Response response;
if (isUpdate) {
final id = data['id'];
uri = Uri.parse('$apiUrl/$id');
debugPrint('๐ง Enviando a API โ PUT $uri');
debugPrint('๐จ Payload JSON โ ${jsonEncode(data)}');
response = await http.put(
uri,
headers: {
'Content-Type': 'application/json',
'Authorization': 'Bearer $token',
},
body: jsonEncode(data),
);
} else {
uri = Uri.parse(apiUrl);
debugPrint('๐ง Enviando a API โ POST $uri');
debugPrint('๐จ Payload JSON โ ${jsonEncode(data)}');
response = await http.post(
uri,
headers: {
'Content-Type': 'application/json',
'Authorization': 'Bearer $token',
},
body: jsonEncode(data),
);
}
debugPrint('๐ Respuesta API โ status: ${response.statusCode}');
debugPrint('๐ฆ Respuesta body โ ${response.body}');
if (response.statusCode == 200 || response.statusCode == 201) {
debugPrint('โ
Muestreo sincronizado OK en API');
return true;
} else {
debugPrint(
'โ API error: Cรณdigo ${response.statusCode}, body: ${response.body}');
await _sendNotification(
'Error API Muestreo', 'Cรณdigo: ${response.statusCode}');
return false;
}
} catch (e) {
debugPrint('โ Error upload Muestreo: $e');
await _sendNotification('Error Upload Muestreo', e.toString());
return false;
}
}