diff --git a/lib/src/components/drawer_menu.dart b/lib/src/components/drawer_menu.dart index c7ebd4f..1ac0f8a 100644 --- a/lib/src/components/drawer_menu.dart +++ b/lib/src/components/drawer_menu.dart @@ -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 { ), ), ListTile( - onTap: () {}, + onTap: () { + Navigator.push( + context, + CupertinoPageRoute( + builder: (BuildContext context) { + return const MessagesUserScreen(); + }, + ), + ); + }, leading: const Icon( Icons.messenger_outline, color: Colors.black, diff --git a/lib/src/models/chat_model.dart b/lib/src/models/chat_model.dart index 21e922b..9dacb54 100644 --- a/lib/src/models/chat_model.dart +++ b/lib/src/models/chat_model.dart @@ -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 fromDocumentSnapshot2( DocumentSnapshot> 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: ''); } } diff --git a/lib/src/models/event_model.dart b/lib/src/models/event_model.dart index 6751599..009a757 100644 --- a/lib/src/models/event_model.dart +++ b/lib/src/models/event_model.dart @@ -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 data = snapshot.data(); - return Event.fromJson(data); + .get(); + final Map? data = snapshot.data(); + return Event.fromJson(data!); } catch (e) { print('Error getting user: $e'); return Event( diff --git a/lib/src/screens/chat.dart b/lib/src/screens/chat.dart index 446a4a7..f777799 100644 --- a/lib/src/screens/chat.dart +++ b/lib/src/screens/chat.dart @@ -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 createState() => _ChatScreenState(); @@ -20,23 +20,23 @@ class _ChatScreenState extends State { 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 { @override Widget build(BuildContext context) { - String textoIngresado = _textController.text; return Scaffold( appBar: PopAppbar( onPressed: () { @@ -144,7 +143,7 @@ class _ChatScreenState extends State { FirebaseFirestore.instance .collection('chats') - .doc(widget.evento.id) + .doc(widget.eventoId) .update({ 'message': FieldValue.arrayUnion([nuevoMensajeMap]) }); @@ -179,7 +178,7 @@ class _ChatScreenState extends State { 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 { ), ) ]); - - // ListTile( - // title: Text('${}'), - // ); }, ); } diff --git a/lib/src/screens/cita.dart b/lib/src/screens/cita.dart index ad0c770..b931c12 100644 --- a/lib/src/screens/cita.dart +++ b/lib/src/screens/cita.dart @@ -249,7 +249,7 @@ class _CitaScreenState extends State { context, CupertinoPageRoute( builder: (BuildContext context) { - return ChatScreen(evento: widget.evento); + return ChatScreen(eventoId: widget.evento.id); }, ), ); diff --git a/lib/src/screens/messages.dart b/lib/src/screens/messages.dart index 4503359..77df8ae 100644 --- a/lib/src/screens/messages.dart +++ b/lib/src/screens/messages.dart @@ -58,12 +58,12 @@ class _MessagesScreenState extends State { 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); }, ), ); diff --git a/lib/src/screens/messages_user.dart b/lib/src/screens/messages_user.dart new file mode 100644 index 0000000..3dbdce6 --- /dev/null +++ b/lib/src/screens/messages_user.dart @@ -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 createState() => _MessagesUserScreenState(); +} + +class _MessagesUserScreenState extends State { + final uid = AuthenticationRepository.instance.getCurrentUserUid(); + List list = []; + @override + void initState() { + super.initState(); + + ChatModel.getChatsByUserId(uid!).then( + (List 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); + }, + ), + ); + }); + }, + ); + }, + ), + ), + ], + ), + ); + } +}