Files
packet/lib/domain/entities/pendiente.dart
tzzrgit dac0c51483 PACKET v1.0.0 - Initial release
App móvil Flutter para capturar contenido multimedia, etiquetarlo con hashes y enviarlo a backends configurables.

Features:
- Captura de fotos, audio, video y archivos
- Sistema de etiquetas con bibliotecas externas (HST)
- Packs de etiquetas predefinidos
- Cola de reintentos (hasta 20 contenedores)
- Soporte GPS
- Hash SHA-256 auto-generado por contenedor
- Persistencia SQLite local
- Múltiples destinos configurables

Stack: Flutter 3.38.5, flutter_bloc, sqflite, dio

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-21 18:10:27 +01:00

56 lines
1.5 KiB
Dart

import 'dart:typed_data';
class Pendiente {
final String hash;
final String? titulo;
final Uint8List contenido;
final int intentos;
final DateTime? ultimoIntento;
final DateTime? proximoIntento;
final int? destinoId;
Pendiente({
required this.hash,
this.titulo,
required this.contenido,
this.intentos = 0,
this.ultimoIntento,
this.proximoIntento,
this.destinoId,
});
factory Pendiente.fromMap(Map<String, dynamic> map) => Pendiente(
hash: map['hash'] as String,
titulo: map['titulo'] as String?,
contenido: map['contenido'] as Uint8List,
intentos: map['intentos'] as int? ?? 0,
ultimoIntento: map['ultimo_intento'] != null
? DateTime.parse(map['ultimo_intento'] as String)
: null,
proximoIntento: map['proximo_intento'] != null
? DateTime.parse(map['proximo_intento'] as String)
: null,
destinoId: map['destino_id'] as int?,
);
Map<String, dynamic> toMap() => {
'hash': hash,
'titulo': titulo,
'contenido': contenido,
'intentos': intentos,
'ultimo_intento': ultimoIntento?.toIso8601String(),
'proximo_intento': proximoIntento?.toIso8601String(),
'destino_id': destinoId,
};
bool get puedeReintentar => intentos < 20;
String get estado {
if (intentos >= 20) return 'agotado';
if (proximoIntento != null && proximoIntento!.isAfter(DateTime.now())) {
return 'esperando';
}
return 'listo';
}
}