パッケージ、リポジトリ、アプリカテゴリを検索

パッケージ詳細v0.1.2

flutter_mqchat

MqChat クライアント。このパッケージを使用すると、MQTT プロトコルをチャットプロトコルとして使用できます。ブローカーは HiveMq-Chat-Extension の仕様を実装する必要があります。

AndroidiOSmacOSWindowsLinux
30日間ダウンロード
32
いいね数
15
Pub ポイント
125

パッケージをインストール

flutter pub add flutter_mqchat

パッケージ概要

公開情報に基づく選定ガイドです。参考としてご利用ください。

FlutterMQChat は、HiveMQ-Chat-Extension 決定事項をサポートするブローカーと連携してリアルタイムチャット機能を提供するための Flutter パッケージです。MQTT の複雑さを抽象化することで双方向メッセージングを簡素化し、軽量で遅延が小さいチャットアプリに最適です。Android、iOS、macOS、Windows、Linux など複数のプラットフォームをサポートしており、クロスプラットフォームでの一貫性を確保しています。最小限のオーバーヘッドで即時メッセージ配信が必要なアプリに特に役立ちます。

用途

  • リアルタイムメッセージングアプリ
  • IoTベースのチャットシステム
  • クロスプラットフォームチャットクライアント
  • 低遅延通信
  • 共同作業ツール

主な機能

  • MQTTベースのチャットプロトコル
  • HiveMQ-Chat-Extensionに対応
  • マルチプラットフォーム対応
  • メッセージ処理のためのシンプルな API
  • 軽量で効率的

適している対象

  • リアルタイムチャット機能を構築している開発者
  • インフラに MQTT を使用しているチーム
  • スケーラブルなメッセージングを必要とするアプリ
  • 複数のオペレーティングシステムをターゲットにするプロジェクト
  • IoTまたは埋め込みチャットアプリケーション

注意事項

  • HiveMQ-Chat-Extension を備えたブローカーが必要です
  • MQTT互換環境に限定
  • 組み込みのユーザー認証なし
  • 外部ブローカーのセットアップに依存します
  • 追加の対策なしでは、高セキュリティチャットには適していません

元の README

関連するソースリポジトリの README 原文のスナップショットです。最新の内容はリポジトリをご覧ください。

Flutter client of MqChat, a protocol built over MQTT for chatting purposes.

The Broker should install HiveMQ Chat-Extension first.

Features

Use MQTT as a chat protocol, to create a modern chat application that supports all needed features. This is a flutter client of MqChat.

  • [x] Login
  • [x] Send/receive messages (text, image, vide, location, document, contact messages)
  • [x] Send Files
  • [x] Typing indicators
  • [x] Presence
  • [x] Group Chat
  • [x] Private Chat invitation

Getting started

Install the package flutter-mqchat:

flutter pub add flutter-mqchat

Usage

A full and rich example can be found in /example folder.

1. Login

User login using an existing account:

bool connected = await ChatApp.instance()!.clientHandler.connect(
        host: "broker.url.com",
        username: "user@test.com",
        password: "user_pass");

After a successful login, the mqtt client will receive updates. The first updates to be received are profile details, rooms that users is member of, ongoing invitations and messages (if message archiving is supported by the broker).

2. Listen to my profile changes
ChatApp.instance()!.archiveHandler.getUser().listen((user) {
      //insert/update user to database
    });
3. Listen to rooms

Whenever the logged in user is added to a room (or room details changed), the room details will be added to the Conversations stream.

ChatApp.instance()!.archiveHandler.getAllConversations().listen((rooms) {
      //insert/update rooms on the Database
    });
4. Listen to new messages
ChatApp.instance()!.messageReader.getChatMessages().listen((message) {
      var dbMessage = message.toDbMessage();
      // insert the message to the database
      // send chatmarker if the message is not mine
    });
5. Listen to ChatMarkers
ChatApp.instance()!
        .messageReader
        .getChatMarkerMessages()
        .listen((markerMessage) {

      String messageId = markerMessage.referenceId;
      if (markerMessage.status == ChatMarker.displayed) {
          //update the database record
      } else if (markerMessage.status == ChatMarker.delivered) {
          //update the database record
      }
    });
6. Listen to new chat invitations
ChatApp.instance()!
        .invitationHandler
        .newInvitationsStream()
        .listen((invitation) {
          if(invitation.type == MessageType.EventInvitationRequest) {
            //new invitation request
            //insert invitation record to the database, notify the user
          }
          if(invitation.type == MessageType.EventInvitationResponseAccept || invitation.type == MessageType.EventInvitationResponseReject) {
            //responded to invitation, update the local record and wait the server to sync the new contact (if accepted).
            //Do not insert a room, the user will receive a new room details triggered by getAllConversations()
          }
    });
7. Listen to invitatioin updates

We use this to listen to the invitations that the user has sent. It could be:

  • Info: When receive an affirmation that the invitation is sent
  • Error: When there is an error (like the user is not found)
ChatApp.instance()!
        .invitationHandler
        .invitationUpdatesStream()
        .listen((invitation) {
      if (invitation.invitationMessageType == InvitationMessageType.INFO) {
       //update the invitation record to be confirmed
      }
      else if (invitation.invitationMessageType == InvitationMessageType.ERROR) {
        //notify the user, and delete the record in inserted
      }
    });
8. Send a text Message
ChatMessage newMessage = ChatMessage(
        id: "generated_random_id",
        type: MessageType.ChatText,
        text: "Hello there",
        roomId: "[room_id]",
        fromId: "[my_id]",//optional
        sendTime: DateTime.now().millisecondsSinceEpoch,
        fromName: "[my_name]");
8.1 Send the message as regular message
ChatApp.instance()!
          .messageSender
          .sendChatMessage(newMessage, "[room_id]");
8.2 Send the message as a reply to another message
ChatMessage replyToMessage = ...; //the message to reply to
ChatApp.instance()!
          .messageSender
          .replyToMessage(replyToMessage, newMessage, widget.contactChat.roomId);
9. Send File Message
 ChatApp.instance()!.messageSender.sendFileChatMessage(
          type: MessageType.ChatImage,//for example
          fileLocalPath: path,
          room: "[room_id]");
10. Send typing indicator
ChatApp.instance()!
          .eventsSender
          .sendIsTyping(true, "[room_id]");
11. Listen to typing indicator
ChatApp.instance()!.messageReader.getTypingMessages().listen((event) {
    //using event.roomId and event.isTyping and event.fromId, update the ui state
    
    });
12. Send new chat invitation
ChatApp.instance()!
        .eventsSender
        .sendInvitation("[invitee_username]", "[invitation_random_id]");

Additional information

TODO: Tell users more about the package: where to find more information, how to contribute to the package, how to file issues, what response they can expect from the package authors, and more.

カテゴリー

依存関係

依存関係一覧 6 件

ソースリポジトリ

このパッケージを使用しているプロジェクト

データはまだありません。