configureOpenIM method

Future<void> configureOpenIM({
  1. required String imApiAddr,
  2. required String imWsAddr,
  3. String? dataDir,
})

在拿到控制面 imApiAddr/imWsAddr 后初始化 OpenIM。

Implementation

Future<void> configureOpenIM({
  required String imApiAddr,
  required String imWsAddr,
  String? dataDir,
}) async {
  final dir = dataDir ??
      _dataDir ??
      Directory.systemTemp.createTempSync('sy_im').path;
  _dataDir = dir;
  final adapter = OpenIMAdapter(imApiAddr: imApiAddr, imWsAddr: imWsAddr);
  adapter.onConnectSuccess = () => onConnectSuccess?.call();
  adapter.onConnecting = () => onConnecting?.call();
  adapter.onConnectFailed = (c, m) => onConnectFailed?.call(c, m);
  adapter.onKickedOffline = () => onKickedOffline?.call();
  adapter.onUserTokenExpired = () => onUserTokenExpired?.call();
  adapter.onRecvNewMessage = (id, from, gid, text) {
    onRecvNewMessage?.call(id, from, gid, text);
    unawaited(_syncUnreadFromSdk());
  };
  adapter.onRecvC2CReadReceipt = (receipts) {
    onRecvC2CReadReceipt?.call(receipts);
    onRecvReadReceipts?.call(receipts);
  };
  adapter.onMessageRevoked = (info) => onMessageRevoked?.call(info);
  adapter.onTypingChanged = (status) => onTypingChanged?.call(status);
  adapter.onTotalUnreadChanged = (total) {
    _publishUnread(() => _unread.applyTotal(total));
  };
  adapter.onConversationsChanged = (conversations) {
    _publishUnread(() => _unread.applyDelta(conversations));
    _checkGroupReadWatches(conversations.map((c) => c.conversationId));
  };
  adapter.onConversationUpdated = () => onConversationUpdated?.call();
  await adapter.initSdk(dataDir: dir);
  _adapter = adapter;
  _initialized = true;
}