setNIMMessageListener method

void setNIMMessageListener()

Implementation

void setNIMMessageListener() {
  if (initListener) return;
  initListener = true;
  _logI('message init listener');
  //net work
  Connectivity()
      .checkConnectivity()
      .then((value) => hasNetWork = value != ConnectivityResult.none);
  subscriptions.add(Connectivity().onConnectivityChanged.listen((event) {
    hasNetWork = event != ConnectivityResult.none;
    notifyListeners();
  }));
  //new message
  subscriptions.add(
      ChatServiceObserverRepo.observeReceiveMessage().listen((event) async {
    _logI('receive msg -->> ${event.length}');
    if (event.length > 0) {
      _logI('onMessage 0:${event[0].toMap()}');
    }
    List<NIMMessage> list = event.where((element) {
      return element.sessionId == sessionId && !_isFilterMessage(element);
    }).toList();
    if (list.isNotEmpty) {
      var res = await ChatMessageRepo.fillUserInfo(list);
      _messageList.addAll(res);
      notifyListeners();
    }
  }));
  //message status change
  subscriptions
      .add(ChatServiceObserverRepo.observeMsgStatus().listen((event) {
    _logI(
        'onMessageStatus ${event.uuid} status change -->> ${event.status}, ${event.attachmentStatus}');
    if (_updateNimMessage(event) == false) {
      //如果更新失败则添加
      _messageList.add(ChatMessage(event));
      notifyListeners();
    }
  }));

  //p2p message receipt
  subscriptions
      .add(ChatServiceObserverRepo.observeMessageReceipt().listen((event) {
    _updateP2PReceipt(event);
  }));

  //team message receipt
  if (sessionType == NIMSessionType.team) {
    subscriptions.add(
        ChatServiceObserverRepo.observeTeamMessageReceipt().listen((event) {
      for (var element in event) {
        _updateTeamReceipt(element);
      }
    }));

    subscriptions
        .add(ChatServiceObserverRepo.observerTeamUpdate().listen((event) {
      for (var team in event) {
        _logI('observeTeamUpdate ${team.id}');
        if (team.id == teamInfo?.id) {
          chatTitle = team.name!;
          teamInfo = team;
          notifyListeners();
        }
      }
    }));
  } else {
    subscriptions.add(ChatServiceObserverRepo.observeCustomNotification()
        .listen((notification) {
      if (notification.sessionId != sessionId ||
          notification.sessionType != NIMSessionType.p2p) {
        return;
      }
      var content = notification.content;
      if (content?.isNotEmpty == true) {
        Map<String, dynamic> options = jsonDecode(content!);
        if (options[typeState] == 1) {
          isTyping = true;
        } else {
          isTyping = false;
        }
        notifyListeners();
      }
    }));
  }

  subscriptions
      .add(ChatServiceObserverRepo.observeRevokeMessage().listen((event) {
    _updateMessage(ChatMessage(event.message!, isRevoke: true));
  }));

  subscriptions
      .add(ChatServiceObserverRepo.observeMessagePin().listen((event) {
    _logI('onMessagePinNotify');
    if (event is NIMMessagePinAddedEvent) {
      _updateMessagePin(event.pin);
    } else if (event is NIMMessagePinRemovedEvent) {
      _updateMessagePin(event.pin, delete: true);
    }
  }));
}