Client de Flutter de MQChat, un protocole construit sur MQTT à des fins de chat.
Le courtier doit d'abord installer Hivemq Chat-Extension.
Utilisez MQTT comme protocole de chat, pour créer une application de chat moderne qui prend en charge toutes les fonctionnalités nécessaires. Ceci est un client Flutter de MQChat.
Installez le package flutter-mqchat :
flutter pub add flutter-mqchat
Un exemple complet et riche se trouve dans le dossier /example .
Connexion de l'utilisateur à l'aide d'un compte existant:
bool connected = await ChatApp . instance () ! .clientHandler. connect (
host : "broker.url.com" ,
username : "[email protected]" ,
password : "user_pass" );Après une connexion réussie, le client MQTT recevra des mises à jour. Les premières mises à jour à recevoir sont les détails du profil, les salles dont les utilisateurs sont membre, les invitations et les messages en cours (si l'archivage des messages est pris en charge par le courtier).
ChatApp . instance () ! .archiveHandler. getUser (). listen ((user) {
//insert/update user to database
});Chaque fois que l'utilisateur enregistré est ajouté à une pièce (ou les détails de la pièce modifiés), les détails de la pièce seront ajoutés au flux de conversations.
ChatApp . instance () ! .archiveHandler. getAllConversations (). listen ((rooms) {
//insert/update rooms on the Database
}); ChatApp . instance () ! .messageReader. getChatMessages (). listen ((message) {
var dbMessage = message. toDbMessage ();
// insert the message to the database
// send chatmarker if the message is not mine
}); 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
}
}); 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()
}
});Nous l'utilisons pour écouter les invitations que l'utilisateur a envoyées. Cela pourrait être:
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
}
}); 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]" ); ChatApp . instance () !
.messageSender
. sendChatMessage (newMessage, "[room_id]" ); ChatMessage replyToMessage = ...; //the message to reply to
ChatApp . instance () !
.messageSender
. replyToMessage (replyToMessage, newMessage, widget.contactChat.roomId); ChatApp . instance () ! .messageSender. sendFileChatMessage (
type : MessageType . ChatImage , //for example
fileLocalPath : path,
room : "[room_id]" ); ChatApp . instance () !
.eventsSender
. sendIsTyping ( true , "[room_id]" ); ChatApp . instance () ! .messageReader. getTypingMessages (). listen ((event) {
//using event.roomId and event.isTyping and event.fromId, update the ui state
}); ChatApp . instance () !
.eventsSender
. sendInvitation ( "[invitee_username]" , "[invitation_random_id]" );TODO: en dire plus sur les utilisateurs sur le package: où trouver plus d'informations, comment contribuer au package, comment déposer les problèmes, quelle réponse ils peuvent attendre des auteurs du package, et plus encore.