sayHello method

Future<void> sayHello(
  1. String friendId,
  2. Message message, {
  3. Profile? profile,
  4. ChatSilentNotification? notification,
  5. OnChatPageOpeningCallback<Object?>? callback,
  6. VerifyToSendMessage? verifyToSend,
  7. OnDeniedToSendMessage? onDeniedToSend,
})

Implementation

Future<void> sayHello(
  String friendId,
  Message message, {
  Profile? profile,
  ChatSilentNotification? notification,
  OnChatPageOpeningCallback? callback,
  VerifyToSendMessage? verifyToSend,
  OnDeniedToSendMessage? onDeniedToSend,
}) async {
  try {
    if (profile != null && profile.id.isNotEmpty) {
      mappedProfiles[profile.id] = profile;
    }

    final target = await createOrGetThread([friendId]);
    if (target.isEmpty) return;

    if (verifyToSend != null && !verifyToSend(target)) {
      onDeniedToSend?.call(target);
      return;
    }

    final mgr = managerForRoom(target);
    await mgr.send(
      message,
      verifyToSend: verifyToSend,
      onDeniedToSend: onDeniedToSend,
      notification: notification,
    );

    if (callback != null) {
      mgr.connect();
      try {
        await callback(mgr);
      } finally {
        mgr.disconnect();
      }
    }
  } catch (e, st) {
    errorReporter.report(
      e,
      stackTrace: st,
      source: 'RoomManager.sayHello',
      context: {'friendId': friendId},
    );
  }
}