saveMessageInLocal static method

Future<void> saveMessageInLocal(
  1. Message message
)

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}');
}