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