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>
This commit is contained in:
55
lib/domain/entities/pendiente.dart
Normal file
55
lib/domain/entities/pendiente.dart
Normal file
@@ -0,0 +1,55 @@
|
||||
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';
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user