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