ADD : Send messages From MassagingService by controller
continuous-integration/drone/push Build is failing Details

#MSG01/ImplementationFirebaseMessaging
Audric SABATIER 2 years ago
parent 7f35484e2c
commit cee8a2fd80

@ -10,15 +10,32 @@ import '../services/api/api_spotify.dart';
import '../services/database/database_service.dart'; import '../services/database/database_service.dart';
import '../services/position/location.dart'; import '../services/position/location.dart';
import 'live_datas.dart'; import 'live_datas.dart';
import 'package:dafl_project_flutter/model/message.dart';
import 'package:dafl_project_flutter/services/messaging/message_database.dart';
class Controller { class Controller {
final ApiSpotify _api = ApiSpotify(); final ApiSpotify _api = ApiSpotify();
late User _currentUser; late User _currentUser;
final DataBaseService _dataBaseService = DataBaseService(); final DataBaseService _dataBaseService = DataBaseService();
final LiveData _data = LiveData(); final LiveData _data = LiveData();
final MessageDatabase _messageAccess = MessageDatabase();
late BuildContext navigatorKey; late BuildContext navigatorKey;
/// FIREBASE Messaging
void sendMessage(Message message, String idSender, String idReceiver){
_messageAccess.sendMessage(message, idSender, idReceiver);
}
initUser() async { initUser() async {
await setCurrentMusic(); await setCurrentMusic();
await setDiscoveries(); await setDiscoveries();

@ -1,20 +0,0 @@
import 'package:dafl_project_flutter/model/message.dart';
import 'package:cloud_firestore/cloud_firestore.dart';
class MessageDatabase{
void SendMessage(String chatId, Message message) {
var documentReference = FirebaseFirestore.instance
.collection('messages')
.doc(chatId)
.collection(chatId)
.doc(DateTime.now().millisecondsSinceEpoch.toString());
FirebaseFirestore.instance.runTransaction((transaction) async {
transaction.set(documentReference,message.toHashMap());
});
}
}

@ -0,0 +1,29 @@
import 'package:dafl_project_flutter/model/message.dart';
import 'package:cloud_firestore/cloud_firestore.dart';
class MessageDatabase {
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)
.collection(chatId)
.doc(DateTime
.now()
.millisecondsSinceEpoch
.toString());
FirebaseFirestore.instance.runTransaction((transaction) async {
transaction.set(documentReference, message.toHashMap());
});
}
}

@ -15,18 +15,25 @@ class _ConversationPageState extends State<ConversationPage> {
String destinataire = 'test'; String destinataire = 'test';
List<Widget> messages = []; List<Widget> messages = [];
bool isNull = true; bool isNull = true;
String receiver = 'test';
final messageTextField = TextEditingController(); 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(() { setState(() {
messages.add(messageWidget( messages.add(messageWidget(messageToSend));
Message(MyApp.controller.getIdDafl().toString(), content)));
}); });
} }
Widget messageWidget(Message message) { Widget messageWidget(Message message) {
if (message.senderId != MyApp.controller.getIdDafl().toString()) { if (message.idSender != MyApp.controller.getIdDafl()) {
return Align( return Align(
alignment: Alignment.centerLeft, alignment: Alignment.centerLeft,
child: Container( child: Container(
@ -204,7 +211,7 @@ class _ConversationPageState extends State<ConversationPage> {
style: const TextStyle(color: Colors.white), style: const TextStyle(color: Colors.white),
decoration: InputDecoration( decoration: InputDecoration(
hintStyle: hintStyle:
TextStyle(color: Colors.white.withOpacity(0.7)), TextStyle(color: Colors.white.withOpacity(0.7)),
border: InputBorder.none, border: InputBorder.none,
hintText: "Votre message...", hintText: "Votre message...",
), ),
@ -218,38 +225,38 @@ class _ConversationPageState extends State<ConversationPage> {
onTap: isNull onTap: isNull
? null ? null
: () { : () {
sendMessage(messageTextField.text); sendMessage(messageTextField.text, MyApp.controller.getIdDafl(), receiver);
if (listScrollController.hasClients) { if (listScrollController.hasClients) {
final position = final position =
listScrollController.position.maxScrollExtent; listScrollController.position.maxScrollExtent;
listScrollController.jumpTo(position); listScrollController.jumpTo(position);
} }
messageTextField.clear(); messageTextField.clear();
}, },
child: isNull == true child: isNull == true
? const SizedBox( ? const SizedBox(
height: 1, height: 1,
width: 1, width: 1,
) )
: Container( : Container(
width: 40, width: 40,
height: 40, height: 40,
margin: const EdgeInsets.fromLTRB(0, 0, 0, 0), margin: const EdgeInsets.fromLTRB(0, 0, 0, 0),
decoration: BoxDecoration( decoration: BoxDecoration(
borderRadius: BorderRadius.circular(100), borderRadius: BorderRadius.circular(100),
gradient: const LinearGradient( gradient: const LinearGradient(
colors: [Color(0xff8e24a1), Color(0xff8163ff)], colors: [Color(0xff8e24a1), Color(0xff8163ff)],
begin: Alignment.topLeft, begin: Alignment.topLeft,
end: Alignment.bottomRight, end: Alignment.bottomRight,
)),
child: Transform.rotate(
angle: -300,
child: const Icon(
Icons.arrow_back,
size: 26,
color: Colors.white,
),
)), )),
child: Transform.rotate(
angle: -300,
child: const Icon(
Icons.arrow_back,
size: 26,
color: Colors.white,
),
)),
) )
], ],
), ),
@ -261,7 +268,7 @@ class _ConversationPageState extends State<ConversationPage> {
final messageTextField = TextEditingController(); final messageTextField = TextEditingController();
return SingleChildScrollView( return SingleChildScrollView(
padding: padding:
EdgeInsets.only(bottom: MediaQuery.of(context).viewInsets.bottom), EdgeInsets.only(bottom: MediaQuery.of(context).viewInsets.bottom),
child: Container( child: Container(
height: 500, height: 500,
width: double.infinity, width: double.infinity,
@ -463,4 +470,4 @@ class _DropdownButtonReasonState extends State<DropdownButtonReason> {
}).toList(), }).toList(),
); );
} }
} }
Loading…
Cancel
Save