ADD : send message to firestore database with an unique chatID
continuous-integration/drone/push Build is passing Details

#MSG01/chat_firebase
Audric SABATIER 2 years ago
parent 308bfd95cd
commit 974b046f72

@ -1,4 +1,6 @@
import 'dart:convert';
import 'package:dafl_project_flutter/model/message.dart';
import 'package:dafl_project_flutter/services/message_database.dart';
import 'package:flutter/cupertino.dart';
import 'package:http/http.dart' as http;
import '../persistence/database_loader.dart';
@ -13,6 +15,7 @@ class Controller {
static Saver saver = DatabaseSaver();
static Loader loader = DatabaseLoader();
static final Searcher _searcher = DatabaseSearcher();
final MessageDatabase _messageAccess = MessageDatabase();
late BuildContext navigatorKey;
@ -22,6 +25,10 @@ class Controller {
currentUser = User('', ''); //TODO : remove this line
}
void sendMessage(Message message, String idSender, String idReceiver){
_messageAccess.sendMessage(message, idSender, idReceiver);
}
void save(User userToSave) {
saver.save(userToSave);
}

@ -5,7 +5,17 @@ import 'package:cloud_firestore/cloud_firestore.dart';
class MessageDatabase{
void SendMessage(String chatId, Message message) {
String _getChatId(String idSender, String idReceiver){
if (idSender.hashCode <= idReceiver.hashCode)
return '$idSender-${idReceiver}';
else
return '${idReceiver}-$idSender';
}
void sendMessage(Message message, String idSender, String idReceiver) {
String chatId = _getChatId(idSender, idReceiver);
var documentReference = FirebaseFirestore.instance
.collection('messages')
.doc(chatId)
@ -13,7 +23,7 @@ class MessageDatabase{
.doc(DateTime.now().millisecondsSinceEpoch.toString());
FirebaseFirestore.instance.runTransaction((transaction) async {
transaction.set(documentReference,message.toHashMap());
transaction.set(documentReference, message.toHashMap());
});
}

@ -12,21 +12,28 @@ class ConversationPage extends StatefulWidget {
}
class _ConversationPageState extends State<ConversationPage> {
User destinataire = User("test1", '1234');
User receiver = User("test1", '1234');
List<Widget> messages = [];
bool isNull = true;
final messageTextField = TextEditingController();
void sendMessage(String content) {
void sendMessage(String content, String idSender, String idReceiver) {
Message messageToSend = Message(
idSender: idSender,
idReceiver: idReceiver,
content: content);
MyApp.controller.sendMessage(messageToSend, idSender, idReceiver);
setState(() {
messages
.add(messageWidget(Message(MyApp.controller.currentUser, content)));
messages.add(messageWidget(messageToSend));
});
}
Widget messageWidget(Message message) {
if (message.sender != MyApp.controller.currentUser) {
if (message.idSender != MyApp.controller.currentUser.usernameDafl){
return Align(
alignment: Alignment.centerLeft,
child: Container(
@ -218,7 +225,7 @@ class _ConversationPageState extends State<ConversationPage> {
onTap: isNull
? null
: () {
sendMessage(messageTextField.text);
sendMessage(messageTextField.text, MyApp.controller.currentUser.usernameDafl, receiver.usernameDafl);
if (listScrollController.hasClients) {
final position =
listScrollController.position.maxScrollExtent;
@ -375,7 +382,7 @@ class _ConversationPageState extends State<ConversationPage> {
child: ElevatedButton(
onPressed: () {
MyApp.controller.sendEmail(MyApp.controller.currentUser,
destinataire, currentValue, messageTextField.text);
receiver, currentValue, messageTextField.text);
Navigator.pop(context);
},
style: ElevatedButton.styleFrom(

@ -1,6 +1,5 @@
import 'package:flutter/material.dart';
import 'package:page_transition/page_transition.dart';
import 'p_conversation.dart';
class MessagesWidget extends StatefulWidget {

Loading…
Cancel
Save