Klien Flutter dari MQChat, protokol yang dibangun di atas MQTT untuk tujuan mengobrol.
Pialang harus menginstal HIVEMQ Chat-Extension terlebih dahulu.
Gunakan MQTT sebagai protokol obrolan, untuk membuat aplikasi obrolan modern yang mendukung semua fitur yang diperlukan. Ini adalah klien flutter dari MQChat.
Instal paket flutter-mqchat :
flutter pub add flutter-mqchat
Contoh penuh dan kaya dapat ditemukan di /example folder.
Login pengguna menggunakan akun yang ada:
bool connected = await ChatApp . instance () ! .clientHandler. connect (
host : "broker.url.com" ,
username : "[email protected]" ,
password : "user_pass" );Setelah login yang berhasil, klien MQTT akan menerima pembaruan. Pembaruan pertama yang akan diterima adalah detail profil, kamar yang menjadi anggota pengguna, undangan dan pesan yang sedang berlangsung (jika pengarsipan pesan didukung oleh broker).
ChatApp . instance () ! .archiveHandler. getUser (). listen ((user) {
//insert/update user to database
});Setiap kali pengguna yang masuk ditambahkan ke ruangan (atau detail kamar diubah), detail kamar akan ditambahkan ke aliran percakapan.
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()
}
});Kami menggunakan ini untuk mendengarkan undangan yang telah dikirim pengguna. Bisa jadi:
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: Beritahu pengguna lebih lanjut tentang paket: di mana menemukan informasi lebih lanjut, cara berkontribusi pada paket, cara mengajukan masalah, respons apa yang dapat mereka harapkan dari penulis paket, dan banyak lagi.