chat fixed

This commit is contained in:
Juan Felipe Duarte
2023-05-04 16:57:27 -05:00
parent bc1357b7a6
commit 4807041bcf
7 changed files with 141 additions and 56 deletions
+11 -1
View File
@@ -6,6 +6,7 @@ import 'package:prosappco/src/authentication/authentication_repository.dart';
import 'package:prosappco/src/components/photo_view.dart';
import 'package:prosappco/src/models/scores_model.dart';
import 'package:prosappco/src/models/user_model.dart';
import 'package:prosappco/src/screens/messages_user.dart';
import 'package:prosappco/src/screens/profile.dart';
class DrawerMenu extends StatefulWidget {
@@ -165,7 +166,16 @@ class _DrawerMenuState extends State<DrawerMenu> {
),
),
ListTile(
onTap: () {},
onTap: () {
Navigator.push(
context,
CupertinoPageRoute(
builder: (BuildContext context) {
return const MessagesUserScreen();
},
),
);
},
leading: const Icon(
Icons.messenger_outline,
color: Colors.black,
+24 -20
View File
@@ -7,14 +7,15 @@ class ChatModel {
String user_id;
UserModel? user;
UserModel? professional;
String id;
ChatModel({
required this.messages,
required this.professional_id,
required this.user_id,
this.user,
this.professional,
});
ChatModel(
{required this.messages,
required this.professional_id,
required this.user_id,
this.user,
this.professional,
required this.id});
static Future<ChatModel> fromDocumentSnapshot2(
DocumentSnapshot<Map<String, dynamic>> snapshot,
@@ -32,16 +33,19 @@ class ChatModel {
}
return ChatModel(
messages: messages,
professional_id: snapshot.get('professional_id'),
user_id: snapshot.get('user_id'),
user: fillUserModel
? await UserModel.getUser(snapshot.get('user_id'))
: null,
);
messages: messages,
professional_id: snapshot.get('professional_id'),
user_id: snapshot.get('user_id'),
user: fillUserModel
? await UserModel.getUser(snapshot.get('user_id'))
: null,
professional: fillUserModel
? await UserModel.getUser(snapshot.get('professional_id'))
: null,
id: snapshot.id);
} catch (e) {
print('error $e');
return ChatModel(messages: [], professional_id: '', user_id: '');
return ChatModel(messages: [], professional_id: '', user_id: '', id: '');
}
}
@@ -61,13 +65,13 @@ class ChatModel {
}
return ChatModel(
messages: messages,
professional_id: snapshot.get('professional_id'),
user_id: snapshot.get('user_id'),
);
messages: messages,
professional_id: snapshot.get('professional_id'),
user_id: snapshot.get('user_id'),
id: snapshot.id);
} catch (e) {
print('error $e');
return ChatModel(messages: [], professional_id: '', user_id: '');
return ChatModel(messages: [], professional_id: '', user_id: '', id: '');
}
}
+3 -11
View File
@@ -173,17 +173,9 @@ class Event {
final snapshot = await FirebaseFirestore.instance
.collection('services')
.doc(uid)
.get()
.then((docSnapshot) {
if (docSnapshot.exists) {
print('info ${docSnapshot.data()}');
} else {
print('No se encontró ningún documento con la ruta especificada');
}
;
});
final Map<String, dynamic> data = snapshot.data();
return Event.fromJson(data);
.get();
final Map<String, dynamic>? data = snapshot.data();
return Event.fromJson(data!);
} catch (e) {
print('Error getting user: $e');
return Event(
+16 -21
View File
@@ -9,8 +9,8 @@ import 'package:prosappco/src/models/event_model.dart';
import 'package:prosappco/src/models/user_model.dart';
class ChatScreen extends StatefulWidget {
final Event evento;
const ChatScreen({super.key, required this.evento});
final String? eventoId;
const ChatScreen({super.key, this.eventoId});
@override
State<ChatScreen> createState() => _ChatScreenState();
@@ -20,23 +20,23 @@ class _ChatScreenState extends State<ChatScreen> {
final _textController = TextEditingController();
final uid = AuthenticationRepository.instance.getCurrentUserUid();
UserModel? user;
// ScoresModel? scoresModel;
@override
void initState() {
super.initState();
if (user == null) {
if (uid != widget.evento.userId) {
UserModel.getUser(widget.evento.userId).then(
(UserModel s) => setState(() => user = s),
);
} else {
UserModel.getUser(widget.evento.professionalId).then(
(UserModel s) => setState(() => user = s),
);
Event.getEventById(widget.eventoId!).then((event) {
if (user == null) {
if (uid != event.userId) {
UserModel.getUser(event.userId).then(
(UserModel s) => setState(() => user = s),
);
} else {
UserModel.getUser(event.professionalId).then(
(UserModel s) => setState(() => user = s),
);
}
}
}
});
// if (scoresModel == null) {
// ScoresModel.scoreTo(uid.toString(), false, false).then(
@@ -47,7 +47,6 @@ class _ChatScreenState extends State<ChatScreen> {
@override
Widget build(BuildContext context) {
String textoIngresado = _textController.text;
return Scaffold(
appBar: PopAppbar(
onPressed: () {
@@ -144,7 +143,7 @@ class _ChatScreenState extends State<ChatScreen> {
FirebaseFirestore.instance
.collection('chats')
.doc(widget.evento.id)
.doc(widget.eventoId)
.update({
'message': FieldValue.arrayUnion([nuevoMensajeMap])
});
@@ -179,7 +178,7 @@ class _ChatScreenState extends State<ChatScreen> {
return StreamBuilder(
stream: FirebaseFirestore.instance
.collection('chats')
.doc(widget.evento.id)
.doc(widget.eventoId)
.snapshots(),
builder: (context, snapshot) {
if (!snapshot.hasData) {
@@ -262,10 +261,6 @@ class _ChatScreenState extends State<ChatScreen> {
),
)
]);
// ListTile(
// title: Text('${}'),
// );
},
);
}
+1 -1
View File
@@ -249,7 +249,7 @@ class _CitaScreenState extends State<CitaScreen> {
context,
CupertinoPageRoute(
builder: (BuildContext context) {
return ChatScreen(evento: widget.evento);
return ChatScreen(eventoId: widget.evento.id);
},
),
);
+2 -2
View File
@@ -58,12 +58,12 @@ class _MessagesScreenState extends State<MessagesScreen> {
list[index].user?.name ?? '',
),
onTap: () {
Event.getEventById('scOUCJUs6iW7zVo4g2m8').then((value) {
Event.getEventById(list[index].id).then((value) {
Navigator.push(
context,
CupertinoPageRoute(
builder: (BuildContext context) {
return ChatScreen(evento: value);
return ChatScreen(eventoId: list[index].id);
},
),
);
+84
View File
@@ -0,0 +1,84 @@
import 'package:community_material_icon/community_material_icon.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:prosappco/src/authentication/authentication_repository.dart';
import 'package:prosappco/src/components/pop_appbar.dart';
import 'package:prosappco/src/models/chat_model.dart';
import 'package:prosappco/src/models/event_model.dart';
import 'package:prosappco/src/screens/chat.dart';
class MessagesUserScreen extends StatefulWidget {
const MessagesUserScreen({super.key});
@override
State<MessagesUserScreen> createState() => _MessagesUserScreenState();
}
class _MessagesUserScreenState extends State<MessagesUserScreen> {
final uid = AuthenticationRepository.instance.getCurrentUserUid();
List<ChatModel> list = [];
@override
void initState() {
super.initState();
ChatModel.getChatsByUserId(uid!).then(
(List<ChatModel> s) => setState(() {
list = s;
}),
);
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: PopAppbar(
onPressed: () {
Navigator.pop(context);
},
label: 'Mensajes'),
body: Column(
children: [
const Padding(
padding: EdgeInsets.all(10),
child: TextField(
// controller: searchController,
decoration: InputDecoration(
hintText: 'Escriba un nombre',
prefixIcon: Icon(CommunityMaterialIcons.stethoscope),
),
),
),
Expanded(
child: ListView.builder(
itemCount: list.length,
itemBuilder: (BuildContext context, int index) {
final pro = list[index].professional;
final lastMsg = list[index].messages.last;
return ListTile(
title: Text(
(pro?.name ?? '') +
' "' +
(lastMsg.content + lastMsg.timestamp.toString()),
),
onTap: () {
Event.getEventById(list[index].id).then((value) {
Navigator.push(
context,
CupertinoPageRoute(
builder: (BuildContext context) {
return ChatScreen(eventoId: list[index].id);
},
),
);
});
},
);
},
),
),
],
),
);
}
}