saveMessageInLocal static method
Implementation
static Future<void> saveMessageInLocal(Message message) async {
if (kDebugMode) print('💾 saveMessageInLocal: guardando → messageDate=${message.messageDate} | messageId=${message.messageId} | type=${message.type.name} | isUser=${message.isUser} | message=${message.data?.isNotEmpty == true ? message.data![0].message : "sin texto"}');
final pref = await SharedPreferences.getInstance();
var validateMessages = pref.getString('messages');
List<Message> messagesToSave = [];
if (validateMessages == null) {
messagesToSave.add(message);
} else {
List decodedList = jsonDecode(validateMessages);
try {
messagesToSave = decodedList.map((e) => Message.fromJson(e)).toList();
} catch (ex) {
if (kDebugMode) print('💾 saveMessageInLocal: error al decodificar lista local — $ex');
messagesToSave = [];
}
final before = messagesToSave.length;
messagesToSave.firstWhere(
(element) => element.messageDate == message.messageDate,
orElse: () {
messagesToSave.add(message);
return message;
},
);
if (kDebugMode && messagesToSave.length == before) {
print('💾 saveMessageInLocal: mensaje duplicado ignorado (messageDate=${message.messageDate})');
}
}
var encodedMessages = messagesToSave.map((e) => e.toJson()).toList();
pref.setString('messages', jsonEncode(encodedMessages));
if (kDebugMode) print('💾 saveMessageInLocal: total mensajes guardados → ${encodedMessages.length}');
}