Flutter Client de MQChat, un protocolo construido sobre MQTT para fines de chat.
El corredor debe instalar primero la extensión de chat hivemq.
Use MQTT como un protocolo de chat, para crear una aplicación de chat moderna que admita todas las características necesarias. Este es un cliente de Flutter de MQCHAT.
Instale el paquete flutter-mqchat :
flutter pub add flutter-mqchat
Se puede encontrar un ejemplo completo y rico en la carpeta /example .
Inicio de sesión del usuario utilizando una cuenta existente:
bool connected = await ChatApp . instance () ! .clientHandler. connect (
host : "broker.url.com" ,
username : "[email protected]" ,
password : "user_pass" );Después de un inicio de sesión exitoso, el cliente MQTT recibirá actualizaciones. Las primeras actualizaciones que se recibirán son los detalles del perfil, las habitaciones de las que los usuarios son miembros, invitaciones y mensajes continuos (si el corredor es compatible con el archivo de mensajes).
ChatApp . instance () ! .archiveHandler. getUser (). listen ((user) {
//insert/update user to database
});Cada vez que se agrega el usuario iniciado en una habitación (o detalles de la habitación), los detalles de la habitación se agregarán a la transmisión de conversaciones.
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()
}
});Usamos esto para escuchar las invitaciones que el usuario ha enviado. Podría ser:
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: Cuéntele a los usuarios más sobre el paquete: dónde encontrar más información, cómo contribuir al paquete, cómo presentar problemas, qué respuesta pueden esperar de los autores del paquete y más.